如何禁用CMake的“构建期间重新配置”功能?
如何禁用CMake+Ninja的自动重新配置特性?
有两种可靠的方式来禁用CMake的自动重配置行为,解决参数丢失的问题:
1. 初始配置时设置CMAKE_SUPPRESS_REGENERATION变量
在第一次运行CMake配置项目时,直接通过命令行参数添加:
cmake -G Ninja -DCMAKE_SUPPRESS_REGENERATION=ON <其他你的原始参数> <源码目录>
这个变量会告诉CMake,不要在生成的Ninja构建文件中加入自动检查CMakeLists.txt变更并触发重配置的逻辑。之后再运行ninja时,即使修改了CMake输入文件,构建系统也不会自动调用CMake重新配置,完全避免了参数丢失的问题。
如果需要在CMakeLists.txt中固化这个设置,可以在项目根目录的CMakeLists.txt开头添加:
set(CMAKE_SUPPRESS_REGENERATION ON CACHE BOOL "Disable automatic CMake reconfiguration during build" FORCE)
这样后续任何人配置项目时都会自动禁用该特性。
2. 手动修改已生成的构建目录
如果已经生成了Ninja构建文件,不想重新配置整个项目,可以直接修改构建目录下的CMakeCache.txt,添加或修改以下行:
CMAKE_SUPPRESS_REGENERATION:BOOL=ON
保存后重新运行ninja,自动重配置的逻辑就会失效。
注意事项
禁用自动重配置后,当你修改了CMakeLists.txt或相关配置文件时,需要手动重新运行CMake配置命令(带上你需要的所有原始参数),否则构建系统不会应用这些变更。比如:
cmake -G Ninja <你的所有原始参数> <源码目录>
或者使用CMake的重新配置目标:
cmake --build . --target reconfigure
内容的提问来源于stack exchange,提问作者BeeOnRope
相关产品推荐
相关产品推荐

