在 CMake 中为多个配置混合构建标志

Mix build flags for several configurations in CMake

根据 CMake 文档 here,我们可以使用构建类型来指定我们自己的构建类型,根据 CMAKE_BUILD_TYPE 选项向我们的自定义构建添加标志。

例如,if CMAKE_BUILD_TYPE == Profile,CMake 将使用 CMAKE_CXX_FLAGS_PROFILE 作为构建标志。

我想知道是否有任何方法可以 "inherit" 从另一种构建类型构建标志。例如,我想要一个跟踪和调试构建以及一个跟踪和发布构建。是否可以执行类似 CMAKE_BUILD_TYPE=Trace_Debug 的操作,将 CMAKE_CXX_FLAGS_DEBUGCMAKE_CXX_FLAGS_TRACE 添加到构建中?我想这可能会有一些问题,因为它会允许项目有相互矛盾的构建标志,但现在没有什么禁止添加 -O1-O3 到我们的标志,所以这个问题已经存在。

CMake 中没有 "inheriting" 构建类型这样的东西。

Is it possible to do something like CMAKE_BUILD_TYPE=Trace_Debug which adds CMAKE_CXX_FLAGS_DEBUG and CMAKE_CXX_FLAGS_TRACE to the build?

只需定义一个(新)变量 CMAKE_CXX_FLAGS_TRACE_DEBUG 并适当地设置它的值。设置变量的值时,您可以使用其他变量的值:

# Combine values of two variables into the single one.
set(CMAKE_CXX_FLAGS_TRACE_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${CMAKE_CXX_FLAGS_TRACE}")

从结果变量中删除冲突标志由您决定。 CMake 不知道有冲突的标志,它只是将它们传递给编译器工具。