此答案描述了如何从头开始创建自定义配置类型。我如何制作仅与一些添加标志的内置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创建新配置"功能请求,您可以提供支持。
这是一些背景信息,什么可能和无:
-
可能有许多配置特定变量。您可以用脚本复制这些:
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_<CONFIG>
的新配置:list(APPEND CMAKE_MAP_IMPORTED_CONFIG_RELEASEWITHASSERTIONS "Release" "")
-
您对
$<CONFIG:cfg>
类型生成器表达式检查特定配置名称 -
您必须检查属性中的目录/目标/源文件和配置特定的更改
参考
- 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