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

此答案描述了如何从头开始创建自定义配置类型。 如何创建与内置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文件,那么您可能需要的唯一另一个是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) 

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

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

以下是一些背景信息:什么是可能的,什么不是:

  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_将导入的目标映射到新配置:

     list(APPEND CMAKE_MAP_IMPORTED_CONFIG_RELEASEWITHASSERTIONS "Release" "") 
  3. 关于$类型生成器表达式检查特定配置名称,您无法执行任何操作

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

参考

  • Cmake是否设置变量递归?
  • 设置和使用变量的CMake语法是什么?