2010-04-30 23 views
1

我有一個Windows驅動程序工具包解決方案,可以爲打印機驅動程序構建dll。然後我將二進制文件轉換爲C代碼,並將其包含到我的源代碼中,以便可以在運行時解壓縮dll,而不必分發兩個文件,只是.exe。如何從cmake基於目標體系結構創建的Visual Studio項目中排除源文件?

不過,我必須建立i386和導致兩個dll AMD64的dll,因此兩個C文件包括。我可以在編譯時檢查包含哪個文件,但是我們正在使用cmake生成我們的Visual Studio項目,並且我想在項目中包含正確的c文件,並排除其他文件。這將使重建工作,將防止重複符號等

我們創建由不是「的Visual Studio 9 2008」或「的Visual Studio 2008年9 Win64的」運行CMake的Visual Studio項目。這似乎並不可能產生兩種架構Visual Studio項目,所以我可以簡單地解析「CMAKE_GENERATOR:INTERNAL =的Visual Studio 9 2008」,並添加到我的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) 

的子項目的CMakeLists.txt文件正如你所看到的,有一個i386和含有特定結構編碼的二進制文件的AMD64目錄。如何調整cmakelists.txt,以便基於目標生成器排除其中一個或另一個?對於64位我們支持VS2008和即將VS2010。

回答

2

你的推測是正確的,你需要檢查,如果你是支持64位編譯和修改基於該文件名匹配的目錄。如果您使用的是64位Windows編譯器,則CMake變量CMAKE_CL_64將爲true/set。

+0

感謝行之有效。 – 2010-05-08 00:15:41

相關問題