如何创建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请求,您可以提供支持。
以下是一些背景信息:什么是可能的,什么不是:
-
可能存在许多配置特定变量。 你可以用脚本复制那些:
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()
-
您需要通过设置
CMAKE_MAP_IMPORTED_CONFIG_
将导入的目标映射到新配置:list(APPEND CMAKE_MAP_IMPORTED_CONFIG_RELEASEWITHASSERTIONS "Release" "")
-
关于
$
类型生成器表达式检查特定配置名称,您无法执行任何操作 -
您必须检查属性中的目录/目标/源文件和配置特定的更改
参考
- Cmake是否设置变量递归?
- 设置和使用变量的CMake语法是什么?