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

fri*_*zmg 7 cmake visual-studio-2008

我这里有一个vs2008项目.它的项目文件由CMake生成.我想要做的是独立定义Debug和Release目标的库和库目录,即释放发布目标的库和调试目标的调试库.

到目前为止,我不知道该怎么做.我知道我可以用CMAKE_CXX_FLAGS_DEBUGCMAKE_CXX_FLAGS_RELEASE定义不同的编译器参数(或者命名构建目标),但我不知道如何为链接目录和库执行此操作.

创建具有所有定义的CMakeLists文件的同事尝试了它

IF( CMAKE_BUILD_TYPE MATCHES "Debug" )
Run Code Online (Sandbox Code Playgroud)

例如,但这不起作用.根据一些CMake wiki,变量CMAKE_BUILD_TYPE未在配置时定义,仅在运行时定义,具体取决于您正在运行的目标.

目前我有点死路一条,并会欣赏任何提示或方向:).

tib*_*bur 10

有一个target_link_libraries选项可以帮助您做到这一点.但是您需要将库名扩展为完整路径.

target_link_libraries(foo
  debug c:/path/to/debug/lib/blah.lib 
  optimized c:/path/to/optimized/lib/blah.lib)
Run Code Online (Sandbox Code Playgroud)

如果您的库位置以CMake的方式命名(Debug/MinSizeRel/RelWithDebInfo/Release),则可以使用VS $(ConfigurationName)变量:

link_directories(c:/path/to/all/libs/$(ConfigurationName)/)
Run Code Online (Sandbox Code Playgroud)

请注意,$(ConfigurationName)它不是一个cmake变量:它只会在构建/链接步骤中由VS扩展.