Cmake:为多配置 cmake 项目指定配置特定设置

Cmake: Specifiy config specific settings for multi-config cmake project

这里是Cmake新手,我目前正在尝试将一个只考虑单一配置开发的cmake项目转换为一个可以生成visual studio个文件的多配置项目。

我无法解决的问题是在cmake项目中存在依赖于变量CMAKE_BUILD_TYPE的逻辑,例如:

set(ENABLE_DEBUG TRUE)
if ("${CMAKE_BUILD_TYPE}" STREQUAL "Release")
  set(ENABLE_DEBUG FALSE)
)

因为对于 multi-config cmake,CMAKE_BUILD_TYPE 是空的,所以这种方法是行不通的。变量 ENABLE_DEBUG 然后在 cmake 项目中用于诸如:

案例 1:将库添加到仅调试配置

if(ENABLE_DEBUG)
  list(APPEND LIB_SRC src/lib_debug.cpp)
endif()
add_library(LIB OBJECT LIB_SRC)

案例 2:将预处理器标志添加到仅调试配置

if(ENABLE_DEBUG)
  add_definitions(...)
endif()

所以我想知道是否有人有针对上述一种或两种情况的解决方法,该方法适用于多配置 cmake 项目,即我可以指定库添加和预处理器标志而不依赖于 CMAKE_BUILD_TYPE变量。或者如果有一种配置特定的方式来设置 ENABLE_DEBUG 而不依赖于 CMAKE_BUILD_TYPE 变量,那就更好了?

在 CMake 中,多配置构建工具的配置特定设置的常用方法是使用 generator expressions

命令add_library 允许对源文件使用生成器表达式。例如。这个:

add_library(mylib common.c $<$<CONFIG:DEBUG>:debug.c>)

创建一个库,其中包含所有配置中的 common.c 以及 Debug 配置中的附加 debug.c

add_definitions doesn't note usage of generator expressions, but documentation for target_compile_definitions 的文档:

target_compile_definitions(mylib PUBLIC $<$<CONFIG:DEBUG>:-DDEBUG_VAR>)