如何强制CMake在新的Visual Studio配置中与调试库链接?

时间:2012-02-27 13:22:59

标签: visual-studio cmake

我正在使用CMake创建一个Visual Studio 2008项目。在这个项目中,我需要创建一个名为UnitaryTests的新配置。所以,在CMakeLists.txt中我放了一行

set(CMAKE_CONFIGURATION_TYPES "Release;Debug;UnitaryTest" CACHE STRING "Configurations" FORCE) 

稍后在CMakeLists.txt文件中有以下行:

target_link_libraries( ${PROJECT_NAME} ${ASTEK_LIBRARIES} )

链接外部包。变量ASTEK_LIBRARIES包含如下文本:

debug;debug/libs;optimized;release/libs

我的问题是我必须强制新配置仅使用此软件包的调试版本(目前它正在使用发行版本)。你知道怎么做吗?

注意:填充变量ASTEK_LIBRARIES不是我。它是由我无法更改的公司脚本创建的。

感谢您的帮助。

2 个答案:

答案 0 :(得分:4)

使用:

set_property(GLOBAL PROPERTY DEBUG_CONFIGURATIONS "Debug;UnitaryTest")

如果你也定义了RelWithDebInfo,那么这也属于这里。

有关详细信息,请执行:

cmake --help-property DEBUG_CONFIGURATIONS

答案 1 :(得分:0)

要强制target_link_libraries()基于每个目标链接到其他库,请在链接之前适当替换关键字。以下示例显示了如何将“优化”替换为“通用”,以强制调试版本链接到发布(优化)库:

string(REPLACE "optimized" "general" MODIFIED_LIBS "${MY_LIBS}")
target_link_libraries(MyTarget ${MODIFIED_LIBS})

例如对于MY_LIBS =“ optimized; mylib.lib; debug; mylib_d.lib”,MODIFIED_LIBS将为“ general; mylib.lib; debug; mylib_d.lib”。在此示例中,关键字“ general”将导致在调试构建过程中两个库都在目标中链接。

有关更多信息,请参见https://cmake.org/cmake/help/latest/command/target_link_libraries.html