如何导出ccmake中做出的所有CMake配置变更?
如何导出ccmake中的CMake配置变更
当然有办法实现类似cmake-gui「导出变量到命令行」的功能,虽然ccmake没有直接的导出按钮,但我们可以借助CMake的缓存文件和简单的对比工具来搞定。下面是几种实用的方法:
方法1:对比CMakeCache.txt的前后版本
CMake会把所有配置变量存在构建目录下的CMakeCache.txt文件里,我们可以通过对比修改前后的缓存文件来提取变更:
- 第一步:先初始化构建目录(如果还没做的话):
cmake -S <你的源码目录> -B <你的构建目录> - 第二步:备份初始的缓存文件,留作对比基准:
cp <你的构建目录>/CMakeCache.txt <你的构建目录>/CMakeCache.txt.orig - 第三步:启动ccmake进行配置修改,完成后按
c重新配置,再按g生成并退出:ccmake <你的源码目录> -B <你的构建目录> - 第四步:对比两个缓存文件的差异,提取你修改的变量:
用diff命令就能看到变化:
为了直接生成cmake命令能用的diff <你的构建目录>/CMakeCache.txt.orig <你的构建目录>/CMakeCache.txt-D参数,你可以用这个简化的脚本过滤结果:
这个脚本会自动把变更的变量转换成diff -u <你的构建目录>/CMakeCache.txt.orig <你的构建目录>/CMakeCache.txt | grep '^+' | grep -v '^+++' | sed 's/^+//' | awk -F: '{print "-D"$1"="$3}'-DVAR=VALUE的格式,直接复制就能用在后续的cmake命令里。
方法2:用cmake的-L参数对比变量列表
cmake自带的-L参数可以列出所有缓存中的非内部变量,我们也可以用这个来对比前后配置:
- 初始化构建目录后,先导出初始变量列表:
cmake -S <你的源码目录> -B <你的构建目录> -L > initial_vars.txt - 用ccmake修改配置并退出后,再导出修改后的变量列表:
cmake -S <你的源码目录> -B <你的构建目录> -L > modified_vars.txt - 对比两个文件的差异,同样可以用
diff或者脚本提取变更的变量,转换成命令行参数。
注意事项
- 有些变量是CMake自动生成的(比如编译器路径相关的变量),如果不是你主动修改的,建议忽略这些变更,避免不必要的问题。
- 生成的
-D参数可以直接追加到普通cmake命令中,比如:cmake -S <你的源码目录> -B <新的构建目录> -DVAR1=VAL1 -DVAR2=VAL2 ...
内容的提问来源于stack exchange,提问作者MikeMB
相关产品推荐
相关产品推荐

