如何创建继承自 Release 的 CMake 配置类型

Bjö*_*lex 3 c c++ cmake

此答案描述了如何从头开始创建自定义配置类型。如何制作与 builtin 完全匹配的配置类型Release,仅添加一些标志?我现在正在使用这个:

set(CMAKE_CONFIGURATION_TYPES "Debug;Release;ReleaseWithAssertions" CACHE STRING
    "Available build-types: Debug, Release and ReleaseWithAssertions")

set(CMAKE_CXX_FLAGS_RELEASEWITHASSERTIONS "${CMAKE_CXX_FLAGS_RELEASE} 
    -DENABLE_ASSERTIONS=1")
Run Code Online (Sandbox Code Playgroud)

这似乎是我想要的,但我只是复制 的值CMAKE_CXX_FLAGS_RELEASE,所以我想知道是否有用户可能期望的我遗漏的东西?

Flo*_*ian 5

不,不是关于添加与内置完全匹配的自定义“配置类型Release”。这更像是对 CMake功能请求

编辑:刚刚看到实际上有一个“为 MSVC 创建新配置”功能请求,您可以提供支持。

以下是一些可能的和不可能的背景信息:

  1. 可能存在许多特定于配置的变量。你可以用脚本复制那些:

    get_directory_property(_vars VARIABLES)
    foreach(_var IN LISTS _vars)
        if (_var MATCHES "_RELEASE$")
            string(REPLACE "_RELEASE" "_RELEASEWITHASSERTIONS" _var_new "${_var}")
            set(${_var_new} "${${_var}}")
        endif()
    endforeach()
    
    Run Code Online (Sandbox Code Playgroud)
  2. 您需要使用设置将导入的目标映射到新配置 CMAKE_MAP_IMPORTED_CONFIG_<CONFIG>

    list(APPEND CMAKE_MAP_IMPORTED_CONFIG_RELEASEWITHASSERTIONS "Release" "")
    
    Run Code Online (Sandbox Code Playgroud)
  3. 您无法对检查特定配置名称的$<CONFIG:cfg>类型生成器表达式做任何事情

  4. 您必须检查目录/目标/源文件和属性中的配置特定更改

参考