5

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

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

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

由于对于多配置 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 变量,那就更好了?

4

1 回答 1

5

在 CMake 中,用于多配置构建工具的配置特定设置的常用方法是使用生成器表达式

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

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

创建一个库,该库由common.c所有配置以及Debugdebug.c配置中的其他配置组成。

add_definitions的文档没有说明生成器表达式的用法,但target_compile_definitions的文档有:

target_compile_definitions(mylib PUBLIC $<$<CONFIG:DEBUG>:-DDEBUG_VAR>)
于 2017-10-05T09:27:00.763 回答