假设我有一个 CMake 项目,它生成一个 CPU 密集型应用程序。
当我为二进制分发或性能基准测试构建二进制文件时,我希望它们能够得到最大程度的优化,或者至少是高度优化。当我浏览 CMake 文档时,如果我使用
Release
构建类型(例如,对于 GCC,诸如 -O3 -march=native
之类的标志,也许还有其他标志),我不太能保证会为我完成类似的事情。
CMAKE_<LANG>_FLAGS_RELEASE
变量,在我的具体情况下为 CMAKE_CPP_FLAGS_RELEASE
。但是 - 然后我需要(忽略交叉构建):
基于此 - 以及哪些编译器提供哪种优化以及如何启用它们的知识 - 我可以设置这些标志,例如在辅助模块中。
但是 - 这些都不是特定于我的项目的。我的意思是,理论上可能会有一些调整,但大多数都是非常通用的。为什么 CMake 不为我做这件事?个人开发人员更有可能错过一些晦涩的标志,甚至放弃设置任何标志并假设一切都已处理完毕。我的意思是,它是 CMake - 开发人员肯定知道发布版本需要优化,对吗?
...所以,如果不把事情交给 CMake 来处理——对于许多编译器和跨多个平台来说,什么是通用的(ish)、惯用的、希望广泛使用的方法来在 CMake 中启用“完整”优化?
在 CMake 中,使用
Release
构建类型自动应用常规优化,例如针对 GCC/Clang 的 -03
。对于特定优化,例如 -march=native
,请在 CMakeLists.txt 中手动设置 CMAKE_CXX_FLAGS_RELEASE
。