我在这里有一个vs2008项目。它的项目文件由CMake生成。我想要做的是独立定义Debug和Release目标的库和库目录,即释放发布目标的libs和调试目标的调试库。
到目前为止,我不知道该怎么做。我知道我可以用 CMAKE_CXX_FLAGS_DEBUG 和 CMAKE_CXX_FLAGS_RELEASE 定义不同的编译器参数(或者命名构建目标),但我不知道如何为链接目录执行此操作和libs。
使用
创建了包含所有定义的CMakeLists文件的同事IF( CMAKE_BUILD_TYPE MATCHES "Debug" )
例如,,但这不起作用。根据一些CMake wiki,变量 CMAKE_BUILD_TYPE 不是在配置时定义的,仅在运行时定义,具体取决于您正在运行的目标。
目前,我处于死胡同,并希望得到任何提示或指示:)。
答案 0 :(得分:10)
有一个target_link_libraries
选项可以帮助您做到这一点。但是您需要将库名扩展为完整路径。
target_link_libraries(foo
debug c:/path/to/debug/lib/blah.lib
optimized c:/path/to/optimized/lib/blah.lib)
如果您的库位置以CMake的方式命名(Debug / MinSizeRel / RelWithDebInfo / Release),则可以使用VS $(ConfigurationName)
变量:
link_directories(c:/path/to/all/libs/$(ConfigurationName)/)
请注意,$(ConfigurationName)
不是cmake变量:它只会在构建/链接步骤中由VS扩展。
答案 1 :(得分:0)
您只需使用配置集调用cmake:
cmake -DCMAKE_BUILD_TYPE="Debug"
或者我在命令行上指定链接和平台,然后手动调整配置类型:
cmake -dMyConfigType="DebugStaticX86"
#CMakeLists.txt
if( ${MyConfigType} STREQUAL "DebugStaticX86" )
set( CMAKE_BUILD_TYPE Debug )
set( MyLinkType Static )
set( MyPlatform x86 )
#now include other files that set the actual compile/link options
#depending on values of MyLinkType and MyPlatform
....
endif
答案 2 :(得分:0)
include_directories("${DEVINSTPREFIX}$<$<CONFIG:Debug>:/debug>/include")
link_directories("${DEVINSTPREFIX}$<$<CONFIG:Debug>:/debug>/lib")
include_directories("${DEVINSTPREFIX}$<$<CONFIG:Release>:/release>/include")
link_directories("${DEVINSTPREFIX}$<$<CONFIG:Release>:/release>/lib")
这假设:
prefix/
包含混合内容,您可以在其中使用 find_package 选择正确的内容。prefix/debug
包含“手动”配置的调试版本prefix/release
包含“手动”配置的发布版本。