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 行为

相关推荐
Sakura_j_h_5 小时前
EasyEDA PCB 快速设计Skills
c++·python·github
程序喵大人6 小时前
【C++入门】内存模型与资源管理 - 09 shared_ptr 和 weak_ptr 解决共享,也带来代价
开发语言·c++·资源管理·智能指针·内存模型
jimy18 小时前
C++ 中的 `T&&`:右值引用与转发引用
开发语言·c++
会编程的小孩10 小时前
C++ 定时器
c++
沫璃染墨11 小时前
从零入门计算机网络系列(十一):HTTP协议进阶——从重定向原理到GET/POST与Fiddler抓包
linux·服务器·开发语言·网络·c++·tcp/ip·html
揽星河..12 小时前
【C语言】分支和循环
c语言·c++·算法
Fuyo_111914 小时前
C++ AVL树保姆级详解:从平衡因子到四大旋转机制
java·c++·算法
傲世仙尊15 小时前
继承-类设计层次复用切片转换与菱形继承的死结
c++
架构师伯子明15 小时前
FFmpeg C++学习(一):编译和demo
开发语言·c++·学习
纪念 22915 小时前
C++算法(六)
开发语言·c++·算法