CMake:为不同的构建目标定义链接目录和库

时间:2010-09-30 09:13:11

标签: visual-studio-2008 cmake

我在这里有一个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 不是在配置时定义的,仅在运行时定义,具体取决于您正在运行的目标。

目前,我处于死胡同,并希望得到任何提示或指示:)。

3 个答案:

答案 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 包含“手动”配置的发布版本。