19、与 IDE 集成:Visual Studio、CLion、VS Code 对 CMake Presets 的支持
说实话,CMake Presets 这东西,光在命令行里敲确实有点浪费。我平时大部分时间还是在 IDE 里写代码,毕竟谁不喜欢智能提示和图形化调试呢?
这几年主流 IDE 对 Presets 的支持越来越好了。你想想看,团队里有人用 VS,有人用 CLion,还有人用 VS Code,如果每个 IDE 都要单独配一遍构建参数,那 Presets 的「标准化」意义就大打折扣了。
今天我就聊聊这三款 IDE 对 CMake Presets 的支持情况。都是我自己踩过的坑,希望能帮你少走弯路。
Visual Studio:原生支持,但有个小坑
Visual Studio 2019 开始就支持 CMake Presets 了。到了 VS 2022,支持已经相当完善。我个人习惯是把 CMakePresets.json 放在项目根目录,VS 打开项目后会自动识别。
VS 会把 Presets 里的配置项直接映射到 IDE 的配置下拉菜单里。比如你定义了 debug 和 release 两个 Preset,在 VS 的解决方案配置里就能直接选。
关键点:VS 优先读取 CMakePresets.json,如果没有,才会回退到传统的 CMakeSettings.json。所以如果你两个文件都有,VS 会忽略后者。
我曾经遇到过一个坑:VS 对 vendor 字段的支持不太好。如果你在 Presets 里写了 "vendor": { "microsoft.com/VisualStudioSettings/...": ... },VS 会尝试解析这些扩展字段。但如果你写错了格式,VS 会直接报错,连 Presets 都不加载。
避坑指南:VS 的 vendor 字段格式比较严格。我曾经因为少写了一个斜杠,导致整个 Presets 文件失效。建议先在 VS 里新建一个 Preset,看看它自动生成的 vendor 格式是什么样的,然后照着写。
VS 还支持在 CMakePresets.json 里配置调试器。比如你可以指定 "debugger": { "type": "cppvsdbg" },这样按 F5 调试时,VS 会自动用你指定的调试器。
{
"version": 3,
"configurePresets": [
{
"name": "vs-debug",
"displayName": "VS Debug (x64)",
"generator": "Visual Studio 17 2022",
"architecture": { "value": "x64" },
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug"
},
"vendor": {
"microsoft.com/VisualStudioSettings/CMake/1.0": {
"remoteCopySources": true
}
}
}
]
}
CLion:最懂 CMake 的 IDE
CLion 对 CMake Presets 的支持,我个人认为是三款 IDE 里最好的。毕竟 JetBrains 的 CMake 插件一直在更新,而且 CLion 本身就是以 CMake 为核心构建系统的。
CLion 2022.1 开始完整支持 Presets。你打开项目后,CLion 会自动读取 CMakePresets.json,然后在顶部的配置选择器里列出所有 Preset。
有个细节我很喜欢:CLion 会显示 Preset 的 displayName 和 description。如果你在 Presets 里写了 "description": "用于单元测试的 Debug 构建",鼠标悬停时就能看到这段说明。这对团队协作特别有用。
小技巧:CLion 支持在 Presets 里配置 toolchain。比如你可以指定 "toolchain": { "file": "toolchain.cmake" },CLion 会自动加载这个工具链文件。我在做嵌入式开发时经常用这个功能。
CLion 还有一个隐藏功能:它支持 Presets 的 inherit 链。如果你定义了多个 Preset,CLion 会在 UI 上显示继承关系。比如 base Preset 被 debug 和 release 继承,CLion 会用一个树形结构展示出来。
不过要注意,CLion 对 buildPresets 的支持比 configurePresets 晚一些。我记得 CLion 2022.3 才完整支持 build Presets。如果你用的版本比较老,可能只能看到 configure Preset。
VS Code:插件加持,灵活但需要配置
VS Code 本身不直接支持 CMake Presets,但通过 CMake Tools 插件,支持得相当不错。这个插件是微软官方维护的,更新很勤快。
安装 CMake Tools 插件后,它会自动读取项目根目录的 CMakePresets.json。你可以在 VS Code 底部的状态栏看到当前激活的 Preset,点击就能切换。
我个人习惯在 .vscode/settings.json 里指定默认 Preset:
{
"cmake.configureOnOpen": true,
"cmake.preset": "debug",
"cmake.buildPreset": "debug-build"
}
这样每次打开项目,VS Code 会自动用 debug Preset 配置,用 debug-build Preset 构建。省得每次都要手动选。
注意:VS Code 的 CMake Tools 插件对 version 字段有要求。它只支持 version 3 及以上的 Presets 文件。如果你还在用 version 2,插件会提示你升级。
VS Code 还有一个优势:它支持 多根目录 项目。如果你的项目是多个 CMake 子项目组成的,每个子项目都有自己的 CMakePresets.json,VS Code 能分别识别。这点 VS 和 CLion 做得就没这么好。
不过 VS Code 也有个缺点:它对 vendor 字段的支持比较弱。如果你在 Presets 里写了 VS 或 CLion 的 vendor 扩展,VS Code 会直接忽略。所以如果你团队里有人用 VS Code,建议不要依赖 vendor 字段。
三款 IDE 的对比
我整理了一个表格,方便你对比:
| 功能 | Visual Studio | CLion | VS Code |
|---|---|---|---|
| Presets 自动识别 | ✅ 原生支持 | ✅ 原生支持 | ✅ 需 CMake Tools 插件 |
| configurePresets | ✅ 完整支持 | ✅ 完整支持 | ✅ 完整支持 |
| buildPresets | ✅ 支持 | ✅ 2022.3+ | ✅ 支持 |
| testPresets | ⚠️ 部分支持 | ✅ 支持 | ⚠️ 部分支持 |
| vendor 扩展 | ✅ 支持,但格式严格 | ✅ 支持 | ❌ 忽略 |
| 多根目录项目 | ⚠️ 有限支持 | ⚠️ 有限支持 | ✅ 支持较好 |
| 调试器配置 | ✅ 支持 | ✅ 支持 | ⚠️ 需额外配置 |
我的建议
如果你团队里 IDE 不统一,我建议这样做:
- 只写标准的 Presets 字段。别依赖 vendor 扩展,因为 VS Code 会忽略它们。
- 用
displayName和description。这样不管用哪个 IDE,都能看到清晰的构建说明。 - 测试 Presets 时,三个 IDE 都试一遍。我曾经遇到过 CLion 能读但 VS 报错的情况,原因是 VS 对 JSON 格式更严格。
个人经验:我团队里有人用 VS,有人用 CLion。我们最后统一用 CMakePresets.json(version 3),不写任何 vendor 字段。结果三个 IDE 都能正常工作。说白了,Presets 的初衷就是标准化,vendor 字段反而是「非标」的东西。
核心逻辑图
下面这张图展示了 CMake Presets 与三款 IDE 的集成关系:
说白了,CMake Presets 的价值就在于「一次配置,到处使用」。不管团队用什么 IDE,只要 Presets 文件写对了,大家都能获得一致的构建体验。我个人觉得,这才是 Presets 最核心的价值所在。