我有一个 CMake 工具链文件,可以在 x86_64-linux 主机上为 arm-linux 进行交叉编译。在配置期间,我的工具链文件被解析并且它(正确地)找到了一个 GNU 编译器。因此它将加载GNU.cmake
(在我的情况下/usr/share/cmake-3.10/Modules/Compiler/GNU.cmake
)。我不清楚这里的包含层次结构(找不到文档。任何链接都可以使用)。然而,它似乎是这样的:
- 根
CMakeLists.txt
到project()
- 我的工具链.cmake
- 模块目录中的东西(包括
GNU.cmake
) - 将变量加载
%_INIT
到%
缓存变量 - 之后继续
project()
假设我希望这个目标仅使用 -O2 优化来构建。我将它设置在我的工具链中,因为它对于许多项目都是全局的。
set(CMAKE_CXX_FLAGS_RELEASE_INIT "-O2")
但随后GNU.cmake被加载并附加“-O3”。因此我的设置被覆盖。在此之后,我只能在我的项目CMakeLists.txt
文件中覆盖它。我必须为每个项目都这样做,开发人员会错过这个!
所以,我的问题是(重复标题):如何从工具链文件中覆盖 CMake 模块的设置?