Как исключить исходные файлы из созданных cmake проектов Visual Studio на основе целевой архитектуры? - PullRequest
1 голос
/ 30 апреля 2010

У меня есть решение Windows Driver Kit, которое создает DLL для драйвера принтера. Затем я преобразовываю двоичный код в C-код и включаю его в исходный код, чтобы можно было извлечь dll во время выполнения, и мне не нужно распространять два файла, только .exe.

Однако мне нужно собрать dll для i386 и amd64, в результате чего появятся два dll и, следовательно, два c-файла для включения. Я могу проверить во время компиляции, какой файл включить, но мы генерируем наши проекты Visual Studio с помощью cmake, и я хотел бы включить в проект правильный файл c и исключить другой. Это позволит перестроить на работу, предотвратит дублирование символов и т. Д.

Мы создаем проект Visual Studio, запустив cmake для «Visual Studio 9 2008» или «Visual Studio 9 2008 Win64». Не представляется возможным создать проект Visual Studio для обеих архитектур, поэтому я мог бы просто проанализировать "CMAKE_GENERATOR: INTERNAL = Visual Studio 9 2008" и добавить в мой файл cmakelists.txt соответствующую проверку.

Вот файл cmakelists.txt для рассматриваемого подпроекта

if(WIN32)
project (StaticDriverLib)

file(GLOB DriverLib_CPP *.cpp ../MasterInstallDir/*.cpp ../MasterInstallDir/amd64/*.cpp ../MasterInstallDir/i386/*.cpp)
file(GLOB DriverLibLib_H *.hpp *.h ../MasterInstallDir/*.hpp)

include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../ ${CMAKE_CURRENT_SOURCE_DIR}/../MasterInstallDir)

# static DriverLibLib library
add_library(StaticDriverLibLib ${DriverLib_CPP} ${DriverLib_H})
add_dependencies(StaticDriverLib StaticLibCore)
target_link_libraries(StaticDriverLib StaticCore Version.lib Setupapi.lib kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib odbc32.lib odbccp32.lib)

endif(WIN32)

Как видите, есть каталог i386 и каталог amd64, содержащий кодированные двоичные файлы для конкретной архитектуры. Как настроить файл cmakelists.txt, чтобы исключить одно или другое в зависимости от целевого генератора? Для 64 бит мы поддерживаем VS2008 и скоро VS2010.

1 Ответ

2 голосов
/ 04 мая 2010

Ваше предположение верно, вам нужно проверить, компилируете ли вы 64-битную поддержку, и на основании этого изменить каталог глобуса файла. Переменная CMake CMAKE_CL_64 будет истинной / установленной, если вы используете компилятор 64 окон.

...