如何创建从版本继承的CMAKE配置类型

How to create a CMake configuration type that inherits from Release

本文关键字:继承 CMAKE 配置 置类型 版本 何创建 创建      更新时间:2023-10-16

此答案描述了如何从头开始创建自定义配置类型。我如何制作仅与一些添加标志的内置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的值,所以我想知道我是否缺少用户可能期望的任何东西?

no,不尊重添加与内置Release完全匹配的自定义"配置类型"。这更像是CMAKE的功能请求。

edit :只是看到实际上有一个"为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()
    
  2. 您需要将导入的目标映射到设置CMAKE_MAP_IMPORTED_CONFIG_<CONFIG>的新配置:

    list(APPEND CMAKE_MAP_IMPORTED_CONFIG_RELEASEWITHASSERTIONS "Release" "")
    
  3. 您对$<CONFIG:cfg>类型生成器表达式检查特定配置名称

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

参考

  • CMAKE设置变量递归?
  • 要设置和使用变量的CMAKE语法是什么?

如果您要编译任何C文件,您唯一可能想要的另一个是cmake_c_flags_release。

请参阅Cmake的文档:

None (CMAKE_C_FLAGS or CMAKE_CXX_FLAGS used)
Debug (CMAKE_C_FLAGS_DEBUG or CMAKE_CXX_FLAGS_DEBUG)
Release (CMAKE_C_FLAGS_RELEASE or CMAKE_CXX_FLAGS_RELEASE)
RelWithDebInfo (CMAKE_C_FLAGS_RELWITHDEBINFO or CMAKE_CXX_FLAGS_RELWITHDEBINFO
MinSizeRel (CMAKE_C_FLAGS_MINSIZEREL or CMAKE_CXX_FLAGS_MINSIZEREL)

来自https://gitlab.kitware.com/cmake/community/community/-/wikis/faq#how-can-can-can-i-extend-the-build-modes-with-a--a-----------------------------定制 -

似乎您想为所有这些做同样的事情。

CMAKE_CXX_FLAGS_RELEASEWITHASSERTIONS
CMAKE_C_FLAGS_RELEASEWITHASSERTIONS
CMAKE_EXE_LINKER_FLAGS_RELEASEWITHASSERTIONS
CMAKE_SHARED_LINKER_FLAGS_RELEASEWITHASSERTIONS