CMake如何处理重复构建选项?优先级规则咨询
CMake编译选项优先级问题解答
优化级别选项冲突(-Og vs -O3)
- 生效的是后出现的选项。CMake会按配置顺序将编译选项传递给编译器,而对于冲突的优化级别参数,编译器会采用最后指定的那一个。比如先通过
set(CMAKE_CXX_FLAGS "-Og")设置优化级别,后续又通过代码追加或替换为-O3,最终编译器会使用-O3进行编译,和选项的宽松/严格程度无关,只看配置顺序的先后。
LTO启用后禁用的情况
- 同样遵循后出现的选项覆盖先出现的规则。无论是通过CMake内置变量
CMAKE_INTERPROCEDURAL_OPTIMIZATION(先设ON再设OFF),还是直接指定编译选项(先-flto后-fno-lto),最终都会以最后一次的设置为准,LTO会被禁用。
核心逻辑总结
CMake处理编译选项时按配置顺序累加,当出现冲突选项时,编译器会以最后接收到的那个选项为准,优先级完全由配置顺序决定,和选项本身的严格/宽松属性无关。
内容的提问来源于stack exchange,提问作者Hedgehog
相关产品推荐
相关产品推荐

