本文系统讲解 VSCode 中 C++ 项目常用的配置文件,包括:
CMakePresets.jsontasks.jsonlaunch.jsonsettings.json.vscode/extensions.jsonCMakeLists.txt
并给出完整案例,适用于:
- Windows
- VSCode
- CMake + Ninja
- MSVC(Visual Studio 2019 工具链)
- Debug / Release 分离构建
1. 各配置文件的作用(总览)
| 文件 | 作用 | 使用者 |
|---|---|---|
| CMakePresets.json | 定义 CMake 的配置方式、构建方式、构建目录 | CMake / CMake Tools |
| tasks.json | VSCode 的构建任务(调用 CMake 构建) | VSCode |
| launch.json | VSCode 调试配置(调试器、程序路径、参数) | VSCode 调试器 |
| settings.json | VSCode 项目级设置(如 CMake generator) | VSCode |
| extensions.json | 推荐安装的扩展 | VSCode |
| CMakeLists.txt | CMake 项目描述文件 | CMake |
它们之间的关系如下:
CMakePresets.json → 决定如何配置/构建项目
tasks.json → VSCode 如何调用 CMake 构建
launch.json → VSCode 如何调试 CMake 生成的程序
settings.json → VSCode 的 CMake Tools 行为
2. 文件之间的关系(核心理解)
2.1 CMakePresets.json 是整个体系的"源头"
它定义:
- 使用的编译器(MSVC、Clang、MinGW)
- 使用的构建系统(Ninja、VS2019)
- Debug / Release 配置
- 构建目录(如 build/debug、build/release)
VSCode 的 CMake Tools 会自动读取它。
2.2 tasks.json 调用 CMakePresets.json 进行构建
示例:
json
{
"label": "build",
"command": "cmake",
"args": [
"--build",
"--preset",
"windows-debug"
]
}
2.3 launch.json 调试 CMake 构建出的程序
关键字段:
"program": "${command:cmake.launchTargetPath}"
VSCode 会自动找到当前 CMake target 的可执行文件。
2.4 settings.json 控制 VSCode 的 CMake 行为
示例:
json
{
"cmake.generator": "Ninja",
"cmake.buildDirectory": "${workspaceFolder}/build"
}
3. 完整案例(Windows + VSCode + CMake + Ninja + MSVC)
以下是推荐的项目结构:
MyProject/
├─ CMakeLists.txt
├─ src/
│ └─ main.cpp
├─ CMakePresets.json
└─ .vscode/
├─ launch.json
├─ tasks.json
└─ settings.json
4. CMakePresets.json(核心配置)
适用于 Ninja + MSVC + Debug/Release 分离:
json
{
"version": 3,
"configurePresets": [
{
"name": "debug",
"generator": "Ninja",
"binaryDir": "${sourceDir}/build/debug",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"CMAKE_C_COMPILER": "cl.exe",
"CMAKE_CXX_COMPILER": "cl.exe"
}
},
{
"name": "release",
"generator": "Ninja",
"binaryDir": "${sourceDir}/build/release",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release",
"CMAKE_C_COMPILER": "cl.exe",
"CMAKE_CXX_COMPILER": "cl.exe"
}
}
],
"buildPresets": [
{
"name": "debug",
"configurePreset": "debug"
},
{
"name": "release",
"configurePreset": "release"
}
]
}
5. tasks.json(构建任务)
VSCode 调用 CMakePresets:
json
{
"version": "2.0.0",
"tasks": [
{
"label": "build-debug",
"type": "shell",
"command": "cmake",
"args": [
"--build",
"--preset",
"debug"
],
"group": "build"
},
{
"label": "build-release",
"type": "shell",
"command": "cmake",
"args": [
"--build",
"--preset",
"release"
],
"group": "build"
}
]
}
6. launch.json(调试 MSVC → cppvsdbg)
自动找到 CMake target 的可执行文件:
json
{
"version": "0.2.0",
"configurations": [
{
"name": "Debug (MSVC + Ninja)",
"type": "cppvsdbg",
"request": "launch",
"program": "${command:cmake.launchTargetPath}",
"args": [],
"cwd": "${workspaceFolder}",
"console": "externalTerminal",
"preLaunchTask": "build-debug"
}
]
}
调试 Release 时只需改:
"preLaunchTask": "build-release"
7. settings.json(VSCode 项目设置)
json
{
"cmake.useCMakePresets": true,
"cmake.configureOnOpen": true
}
8. 文件关系图(最终总结)
CMakePresets.json ←--------- 定义如何配置/构建(Ninja + Debug/Release)
↓
tasks.json ------→ VSCode 调用 CMakePresets 构建
↓
launch.json ------→ 调试 CMake 构建出的 exe
↓
settings.json ------→ 控制 VSCode 的 CMake 行为