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

标签 c++ c cmake

This answer描述了如何从头开始创建自定义配置类型。我怎样才能创建一个与内置 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")

这似乎符合我的要求,但我只是复制了 CMAKE_CXX_FLAGS_RELEASE 的值,所以我想知道我是否遗漏了用户可能期望的任何内容?

最佳答案

不,不是关于添加自定义“与内置 Release 完全匹配的配置类型”。这更像是 feature request for CMake .

编辑:刚刚看到实际上有一个"Creating new configurations for MSVC" feature request你可以给予支持。

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

  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()
    
  2. 您需要使用设置 CMAKE_MAP_IMPORTED_CONFIG_<CONFIG> 将导入的目标映射到您的新配置:

    list(APPEND CMAKE_MAP_IMPORTED_CONFIG_RELEASEWITHASSERTIONS "Release" "")
    
  3. 你不能对$<CONFIG:cfg>做任何事输入 generator expressions检查特定的配置名称

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

引用资料

关于c++ - 如何创建继承自 Release 的 CMake 配置类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43746829/

相关文章:

c - 为什么声明 Clock_t 类型整数会改变我的 C 程序?

c++ - Cmake import -lpthread 等

c++ - 如何在 CMake 中使用对象库创建共享库

c++ - 解释 gcov 输出以提高覆盖率的技巧是什么?

c - 修改存在缓冲区溢出漏洞的C函数的返回地址

c - 如果我们在引导加载程序代码中使用 malloc,编译器会报错吗?

c++ - 子文件夹中的各种库,如何将它们导出到父文件夹?

c++ - Typedef 声明的形式为 `int typedef my_int;`

c++ - 库中的函数名称已更改

c++ - 相当于 C++ 中 vector 的 int[] + k