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

Posted

技术标签:

【中文标题】在 CMake 中为多个配置混合构建标志【英文标题】:Mix build flags for several configurations in CMake 【发布时间】:2020-01-22 00:25:32 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

在 CMake 中没有像“继承”构建类型这样的事情。

是否可以执行类似CMAKE_BUILD_TYPE=Trace_Debug 的操作,将CMAKE_CXX_FLAGS_DEBUGCMAKE_CXX_FLAGS_TRACE 添加到构建中?

只需定义一个(新)变量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 不知道冲突标志,它只是将它们传递给编译器工具。

【讨论】:

以上是关于在 CMake 中为多个配置混合构建标志的主要内容,如果未能解决你的问题,请参考以下文章

如何在 CMake 的 try_compile 函数中为 OpenMP 设置链接器标志

如何在 CMake 中为外部 INTERFACE_SOURCES 设置编译标志?

CMAKE 包配置和标志设置

CMake:配置期间不同的编译器标志?

如何查看CMake使用哪些gcc选项?

使用 CMake 编译 openCV:设置架构和优化标志