2009-12-30 4 views
3

Я сегодня играл с CMake, и до сих пор он отлично работал. Наш проект состоит из проектов +100 Visual Studio 2003; мы хотим перейти на VS2008 и в конечном итоге VS2010, а также поддерживать систему сборки makefile (и, возможно, также Eclipse CDT) ... поэтому определение наших проектов с конфигурационными файлами CMake и создание файлов проекта и make-файлов кажется возможным способом.CMake для создания ActiveX OCX?

Однако у нас есть большое количество OCX, и я не смог найти примеров этого. Кто-нибудь знает о проекте OCX с CMake?

Спасибо! - Josh

+1

Я пытаюсь достичь этого прямо сейчас. –

+0

Что вы делали, когда решаете? – Sambatyon

ответ

1

Я не знаю каких-либо публичных проектов с примером кода, за которым вы можете следовать.

Но OCX - это просто DLL-файлы с определенными свойствами, а CMake вполне способен создавать библиотеки DLL. Это должно быть вполне осуществимым. Вы должны дать ему попробовать и задать конкретные вопросы о любых проблемах, с которыми вы сталкиваетесь на этом пути.

1

FireBreath создает DLL-элементы управления ActiveX с использованием CMake. Вероятно, это не совсем так, как вы создали OCX. Он использует ATL.

Предоставлено, FireBreath делает много других вещей, так как это основа для создания плагинов для браузера, но вы можете посмотреть на cmake structure и посмотреть, что мы делаем. Единственная «сложная» вещь, которую я должен был решить, заключалась в том, что cmake иногда не справляется с .idl-файлами, поэтому вместо добавления файлов .idl я создал собственные шаги сборки для обработки вызова midl.

2

Итак, это заняло некоторое время, но мне удалось создать проект activex с помощью cmake. Тем не менее, я должен сказать, что мне сначала пришлось создать проект activex с визуальной студией, чтобы сгенерировать некоторые файлы, а затем я превратился в проект cmake.

CMAKE_MINIMUM_REQUIRED(VERSION 2.6) 
PROJECT(MyProject) 

# Very useful if project has more than one target 
SET(BIN_OUTPUT_DIR ${MyProject_BINARY_DIR}/bin) 
SET(LIB_OUTPUT_DIR ${MyProject_BINARY_DIR}/lib) 
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${BIN_OUTPUT_DIR}) 
SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${BIN_OUTPUT_DIR}) 
SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${LIB_OUTPUT_DIR}) 

ADD_DEFINITIONS("-DWIN32 -D_WINDOWS -D_USRDLL") 
ADD_DEFINITIONS("-D_AFXDLL -D_UNICODE -DUNICODE -D_WINDLL") 
# Not sure if all this compiler flags are needed, but they reflect the default 
# parameter when creating an activex project 
ADD_DEFINITIONS("/Oi /GL /Gy /Z7") 
SET(CMAKE_SHARED_LINKER_FLAGS "/OPT:REF /OPT:ICF /MACHINE:X86 /SUBSYSTEM:WINDOWS /LTCG") 

# I left this here just as an example it is not needed 
FIND_PACKAGE(Boost) 

SET(TargetName MyTarget) 

FILE(GLOB mytarget_src *.cpp *.idl *.def) 
FILE(GLOB mytarget_hdr *.hpp *.h) 
FILE(GLOB mytarget_res *.rc *.bmp) 
SOURCE_GROUP("Header Files" FILES ${mytarget_hdr}) 
SOURCE_GROUP("Resource Files" FILES ${mytarget_res}) 

# I tried to make this work, but I couldn't, so right now my project doesn't use pch's 
#ADD_PRECOMPILED_HEADER(${TargetName} stdafx.h stdafx.cpp) 

# The last directory is a hack, but it is needed, since the midl compiler outputs the 
# tlb file there, which is later needed by the resource compiler 
INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIR} 
        ${CMAKE_CURRENT_BINARY_DIR}/${TargetName}.dir/${CMAKE_CFG_INTDIR}) 

ADD_LIBRARY(${TargetName} SHARED ${mytarget_src} ${mytarget_hdr} ${mytarget_res}) 
TARGET_LINK_LIBRARIES(${TargetName}) # It is obvious what you put here 

SET_TARGET_PROPERTIES(${TargetName} PROPERTIES SUFFIX ".ocx") 
+0

Просто добавьте, что это решение работает только с визуальной студией, если вы попытаетесь создать activex, сделанный с cmakelists.txt, похожим на этот, с mingw32 вы получите массу странных ошибок, потому что визуальная студия много ставит магии для «склеивания» данных activex с фактическим кодом. – gabry

Смежные вопросы