在 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_DEBUG
和CMAKE_CXX_FLAGS_TRACE
添加到构建中?我想这可能会有一些问题,因为它会允许项目具有相互矛盾的构建标志,但是现在没有什么禁止将-O1
和-O3
添加到我们的标志中,所以这个问题已经存在。
【问题讨论】:
【参考方案1】:在 CMake 中没有像“继承”构建类型这样的事情。
是否可以执行类似
CMAKE_BUILD_TYPE=Trace_Debug
的操作,将CMAKE_CXX_FLAGS_DEBUG
和CMAKE_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 设置链接器标志