VSCode + CMake + C++:配置文件体系完整说明

本文系统讲解 VSCode 中 C++ 项目常用的配置文件,包括:

  • CMakePresets.json
  • tasks.json
  • launch.json
  • settings.json
  • .vscode/extensions.json
  • CMakeLists.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 行为

相关推荐
郝学胜-神的一滴12 分钟前
Qt 高级开发 026:QTabWidget御道,从筑基到化境
开发语言·c++·qt·程序人生·软件构建·用户界面
c++之路32 分钟前
C/C++ 全链路编译工具汇总
c语言·开发语言·c++
c2385633 分钟前
C++的IO流深入理解(下)
开发语言·c++
某林21242 分钟前
ROS 2 与大模型融合实战:从进程连环崩溃到类型安全防御的深度排障复盘
c++·python·安全·机器人·人机交互·ros2
凡人叶枫1 小时前
Effective C++ 条款02:宁可以编译器替换预处理器
java·linux·c语言·开发语言·c++
stevenzqzq1 小时前
vsCode AI插件
ide·人工智能·vscode
AC赳赳老秦1 小时前
用 OpenClaw 制定技术学习计划:根据目标岗位自动生成学习路线、推荐学习资源
开发语言·c++·人工智能·python·mysql·php·openclaw
ShineWinsu2 小时前
对于Linux:内核是如何组织管理IPC资源的解析
linux·服务器·c++·面试·笔试·线程·ipc
少司府2 小时前
C++进阶:红黑树
开发语言·数据结构·c++·b树·二叉树·红黑树
拾贰_C2 小时前
【Ubuntu | VSCode | SSH | 远程连接 | Linux】VSCode 怎么实现ssh远程连接
linux·vscode·ubuntu