如何在终端CMake中复用Visual Studio的CMakeSettings.json配置?
脱离Visual Studio复用CMakeSettings.json配置的实操方法
首先明确:CMakeSettings.json确实是Visual Studio专属的配置文件,原生CMake命令行不直接识别这个文件,但你完全可以把里面的配置映射成CMake原生命令参数,或者转成官方通用的预设文件,不用依赖VS IDE就能实现完全一致的构建、安装效果,对初学者来说门槛很低。
第一步:先搞懂CMakeSettings.json里存的到底是什么
你在这个文件里配的所有内容,本质上都是VS在后台调用CMake时传的启动参数,没有任何VS独有的特殊逻辑,常用配置无非这几类:
- 构建架构(x86/x64/arm64)、构建类型(Debug/Release/RelWithDebInfo等)
- 构建中间产物、最终输出文件的存放路径
- 使用的CMake生成器(比如VS默认配的Ninja、VS MSBuild生成器)
- 自定义CMake缓存变量:比如编译开关、第三方库依赖路径、安装路径这类你自己加的项目配置
第二步:直接映射成CMake原生命令
CMake原生工作流就是两步:配置生成构建系统、执行构建/安装,所有配置参数都在配置阶段传入就行,和VS后台跑的逻辑完全一致。
举个最常见的x64 Release配置的例子,你在项目根目录(放顶层CMakeLists.txt的文件夹)打开终端,直接敲命令就行:
# 配置阶段:对应你在VS里选中对应配置时,后台自动执行的操作 cmake -S . -B out/build/x64-release ` -G "Ninja" ` -DCMAKE_BUILD_TYPE=Release ` -DCMAKE_INSTALL_PREFIX=./install/x64-release ` # 后面把你CMakeSettings.json里variables字段下的所有自定义项,按-D参数名=值的格式追加就行
每个参数的作用不用死记:
-S .:指定源码根目录为当前终端所在路径-B 路径:指定构建产物的存放目录,和你在CMakeSettings.json里配的buildRoot字段完全对应-G 生成器名称:对应配置里选的生成器,之前VS默认用Ninja就填Ninja,想调用MSVC编译器也可以填"Visual Studio 17 2022" -A x64,只要你装了VS的生成工具,不用开IDE就能正常用-DCMAKE_BUILD_TYPE=xxx:指定构建类型,用Ninja、NMake这类单配置生成器时需要传,用VS MSBuild这类多配置生成器可以不在这步传-DCMAKE_INSTALL_PREFIX=路径:指定执行安装命令时文件的输出路径,对应CMakeSettings.json里的installRoot字段- 所有自定义变量:比如你之前配了
BUILD_TESTS:BOOL=true,就追加-DBUILD_TESTS=ON即可,BOOL类型的值用ON/OFF对应true/false就行
配置完成后,构建、安装的命令非常简单,和你在VS里点"生成""安装"的效果完全一致:
# 构建项目,对应VS里的"生成解决方案" cmake --build out/build/x64-release --config Release # 执行安装,对应VS里的"安装"项目 cmake --install out/build/x64-release --config Release
小提示:不管用单配置还是多配置生成器,都可以带上
--config参数指定构建类型,不会报错,省的记不同生成器的规则。
第三步:实现和VS一样一键切换配置的效果
如果你嫌每次敲长命令麻烦,有两个非常简单的方案:
- 写简单的终端脚本:Windows下写bat批处理、Linux/macOS写shell脚本,把不同配置的命令存进去,双击或者敲个短命令就能跑,比在VS里下拉选配置还快
- 转成CMake官方通用的预设文件
CMakePresets.json:现在有现成的小工具可以直接把你现有的CMakeSettings.json转换成这个官方格式,这个文件是CMake 3.19之后原生支持的,不管是纯命令行、VS、VS Code、CLion都能识别,之后不用维护两套配置,命令行切配置只需要敲cmake --preset 配置名就行,非常方便。
初学者避坑提醒
一定要保持和VS一样的 out-of-source 构建习惯,不要直接在源码根目录跑cmake命令,始终用-B参数指定独立的构建目录,避免生成的临时文件把源码目录搞乱。
内容的提问来源于stack exchange,提问作者001001
相关产品推荐
相关产品推荐

