【问题标题】:Cmake: Specifiy config specific settings for multi-config cmake projectCmake:为多配置 cmake 项目指定配置特定设置
【发布时间】:2018-03-16 20:13:46
【问题描述】:

这里是 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 变量,那就更好了?

【问题讨论】:

    标签: c++ visual-studio-2015 cmake multi-configuration


    【解决方案1】:

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

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

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

    创建一个由所有配置中的common.c调试 配置中的附加debug.c 组成的库。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-12
      • 2012-04-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多