【问题标题】:How to create a CMake configuration type that inherits from Release如何创建从 Release 继承的 CMake 配置类型
【发布时间】:2017-05-02 20:38:38
【问题描述】:

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 的值,所以我想知道我是否缺少用户可能期望的任何内容?

【问题讨论】:

    标签: c++ c cmake


    【解决方案1】:

    不,不是关于添加自定义“与内置 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中的目录/目标/源文件和配置特定更改

    参考文献

    【讨论】:

    • 谢谢,这是非常有用的信息。 @dlasalle 描述的解决方案适用于我当前的项目,但您的回答提供了一些有用的资源来了解要注意什么。
    • 这太糟糕了(Cmake方式)。使用一个额外的预处理器宏来创建自定义构建类型以进行公开发布的工作量很大。它应该是 2 行:一是从现有的构建类型创建新的构建类型,另一行是向其中添加属性。感谢您的解决方案,我想我必须编写所有这些只是为了使用一个预处理器宏添加自定义构建类型。
    【解决方案2】:

    如果您正在编译任何 C 文件,您可能需要的唯一另一个是 CMAKE_C_FLAGS_RELEASE。

    见cmake的documentation

    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)
    

    【讨论】:

    • 谢谢,我没发现那部分!
    【解决方案3】:

    来自https://gitlab.kitware.com/cmake/community/-/wikis/FAQ#how-can-i-extend-the-build-modes-with-a-custom-made-one-

    您似乎希望对所有这些都做同样的事情。

    CMAKE_CXX_FLAGS_RELEASEWITHASSERTIONS
    CMAKE_C_FLAGS_RELEASEWITHASSERTIONS
    CMAKE_EXE_LINKER_FLAGS_RELEASEWITHASSERTIONS
    CMAKE_SHARED_LINKER_FLAGS_RELEASEWITHASSERTIONS
    

    【讨论】:

      猜你喜欢
      • 2016-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多