【发布时间】:2010-04-30 18:56:31
【问题描述】:
我有一个为打印机驱动程序构建 dll 的 Windows 驱动程序工具包解决方案。然后我将二进制文件转换为 C 代码并将其包含到我的源代码中,以便可以在运行时提取 dll,我不必分发两个文件,只需分发 .exe。
但是,我必须为 i386 和 amd64 构建 dll,从而生成两个 dll,因此要包含两个 c 文件。我可以在编译时检查要包含哪个文件,但我们正在使用 cmake 生成我们的 Visual Studio 项目,我想在项目中包含正确的 c 文件,并排除另一个。这将允许重建工作,将防止重复符号等。
我们通过为“Visual Studio 9 2008”或“Visual Studio 9 2008 Win64”运行 cmake 来创建 Visual Studio 项目。似乎不可能为这两种架构创建 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。
【问题讨论】:
标签: visual-studio build 64-bit cmake 32-bit