VS Code 配置 C/C++ 编程运行环境

什么是 Visual Studio Code?

Visual Studio Code(简称 VS Code)是由微软开发的一款免费、开源、跨平台的现代化源代码编辑器。它本身并不是一个集成开发环境(IDE),而是一个功能强大且高度可扩展的文本编辑器,通过安装插件可以支持几乎所有主流编程语言的开发、调试和版本控制。

主要特点:

  • ✅ 完全免费:无论是个人还是商业用途,均可免费使用。
  • 🌐 跨平台支持:可在 Windows、macOS 和 Linux 上运行,界面与功能保持一致。
  • 🔌 丰富的扩展生态:通过官方 Marketplace 安装插件(如 C/C++、Python、GitLens 等),轻松扩展功能。
  • 🛠️ 内置终端、调试器、Git 支持:无需切换窗口即可完成编译、运行和版本管理。
  • 🎨 高度可定制:支持主题、快捷键、代码片段、设置同步等个性化配置。

本文以 Windows X86_64 为例,讲解 VS Code 配置 C/C++ 环境。

VS Code 安装

VS Code 下载

浏览器搜索vscode

在这里插入图片描述

Visual Studio Code - The open source AI code editor

适用于 Windows、Mac 和 Linux 的 Visual Studio 和 VS Code 下载

这两个网址都可以

注意,自己电脑推荐下载 System Installer(系统安装版) ,功能更完整(如全局右键菜单)。

进入这两个网址直接下载的是 用户安装版 。

在这里插入图片描述

在这里插入图片描述

都会跳转到这里

Download Visual Studio Code - Mac, Linux, Windows

下载 系统安装版

在这里插入图片描述

VS Code 本体安装

在这里插入图片描述

下载到的安装包,双击打开

在这里插入图片描述

在这里插入图片描述

将 “通过 Code 打开”操作添加到 Windows 资源管理器文件、目录上下文菜单 勾选后,之后可以在资源管理器中,右键点击后,用VS Code打开文件夹,比较方便。

在这里插入图片描述

设置安装路径后安装即可

在这里插入图片描述

插件安装

汉化

默认是英文的,在扩展中搜索 Chinese 汉化插件,安装重启后即可汉化

在这里插入图片描述

C/C++扩展

在这里插入图片描述

这些插件提供以下功能

  • 🔍 IntelliSense(智能感知)
    自动分析代码上下文,提供精准的变量、函数、类成员补全。
  • 🧭 跳转到定义 / 查找所有引用
    按住 Ctrl 点击函数名即可跳转到其定义位置。
  • 📚 悬停查看文档与类型信息
    鼠标悬停在变量或函数上,显示类型、参数说明等。
  • 🛠️ 语法错误实时检查(基于编译器配置)
  • 🧪 调试支持(配合 launch.json 使用 GDB 或 MSVC 调试器)

只需安装 C/C++ Extension Pack(C/C++ 扩展包) ,这是一个官方推荐的一键安装包,安装后 C/C++(核心语言支持) C/C++ Themes(语法高亮主题优化)等将自动安装。

基础知识

为了说明接下来行为的目的,复习一下工具链、C/C++编译过程……这些基础概念。

工具链相关

CPU 只能执行“机器码”。

机器码是一串串由 0 和 1 组成的二进制指令,符合 CPU 的指令集架构(ISA)。不同的 CPU 架构(如 x86、ARM)指令集不同(涉及CPU半导体内部的电路……)。

例如,我的CPU是 AMD的Ryzen 7 5800H。它 x86-64 架构。
在这里插入图片描述

编译器(Compiler)将人类可读的高级代码,转化为 CPU 可执行的二进制机器码。

工具链是一个集合,它包含了从代码变成可执行文件所需的所有工具。

一个典型的 C/C++ 工具链包括:

  • 预处理器:处理 #include、#define 等指令。
  • 编译器:将预处理后的代码翻译成汇编或机器码。
  • 汇编器:将汇编代码翻译成目标文件(.o 或 .obj)。
  • 链接器:将多个目标文件和库文件合并成一个可执行文件(.exe 或 ELF)。
  • 标准库:提供 printf、malloc 等基础函数的实现。
  • 调试器:如 GDB 或 LLDB,用于运行时调试。
  • 构建系统:如 Make、CMake,用于自动化管理复杂的编译流程。
  • 包管理器/环境管理器:如 MSYS2、rustup,用于安装和管理工具链版本。

C/C++编译过程

C/C++ 程序要变成可运行的文件 ,要经历 四个阶段:预处理 → 编译 → 汇编 → 链接。部分工具链会自动合并执行某些阶段。

1. 预处理 (Preprocessing)
  • 输入:源代码文件 (.c, .cpp)
  • 作用:文本替换与展开。预处理器是一个纯粹的文本处理工具,它不懂 C 语言语法,只负责处理以 # 开头的指令。
    • 头文件包含:将 #include <stdio.h> 等内容直接“复制粘贴”到当前文件中。这也是为什么头文件被修改后,所有引用它的源文件都需要重新编译的原因。
    • 宏定义展开:将 #define PI 3.14 中的 PI 全部替换为 3.14。
    • 条件编译:根据 #ifdef、#ifndef 等指令,决定保留或删除哪部分代码。
    • 删除注释:将所有 // 和 /* */ 注释删除。
  • 输出:一个“纯”C++ 文件(无宏、无头文件引用),通常以 .i(C)或 .ii(C++)为扩展名。
2. 编译 (Compilation)
  • 输入:预处理后的文件 (.i)

  • 作用:将预处理后的 C/C++ 代码 翻译成汇编语言。这是最核心的步骤,编译器将高级语言翻译成特定架构的汇编代码。

    • 检查语法错误:比如少写了分号、括号不匹配、类型不兼容等。
    • 代码优化:编译器会尝试优化代码逻辑(例如死代码消除、循环展开),使其运行更快。
    • 生成汇编:将 C/C++ 语句转换为对应的助记符(如 mov, add, call)。
  • 输出:平台相关的汇编代码文件(.s 或 .asm)。

3. 汇编 (Assembly)
  • 输入:汇编语言文件 (.s)
  • 作用:将汇编代码 转换为机器码(二进制目标代码)。
    • 汇编器将人类可读的汇编指令(如 mov eax, 1)一一对应地翻译成 CPU 能直接识别的二进制指令(如 B8 01 00 00 00)。此时,代码已经变成了 CPU 可以执行的格式,但还不能运行。因为尚未解决外部引用,函数调用(如 printf、std::cout)的地址还是空的(占位符),变量之间的引用关系也未确定。
  • 输出:目标文件 / 机器码 (Windows 下为 .obj,Linux 下为 .o)
4. 链接 (Linking)
  • 输入:一个或多个目标文件 (.obj / .o) + 库文件 (.lib / .a / .so / .dll)
  • 作用:符号解析与重定位。将一个或多个 .obj 文件与系统库(如 CRT、C++ 标准库、Windows API)合并,生成最终的可执行文件。
    • 符号解析:链接器扫描所有目标文件与库文件,建立全局符号表。将代码中引用的外部函数(如printf、std::cout)或变量与库中的具体实现进行匹配绑定。
    • **段合并:**将汇编后得到的各个目标文件中同名的段(如代码段、数据段)按序拼接,合并为最终可执行文件中统一的段,便于操作系统统一加载。
    • 地址重定位:根据合并后的内存布局,计算各符号的最终绝对地址。修正代码和重定位表中的地址占位符,确保函数调用指向正确位置。
    • 添加运行时支持:自动链接系统启动文件(如 crt0.o),生成真正的程序入口 _start。负责在调用 main 函数前后完成环境初始化与资源清理。
  • 输出:可执行文件 (Windows 下为 .exe,Linux 下无后缀或 ELF 格式)

关于操作系统加载

对于有完整操作系统的设备,可执行文件( .exe 或 ELF )不仅仅是机器码的堆砌,它们还包含了给操作系统看的“元数据”。
例如当Windows设备运行 .exe 时,操作系统的加载器会介入:

  1. 读取头部信息:加载器读取文件头,了解程序的入口点在哪里(即 main 函数或 _start 标号的地址)、需要多少内存空间。
  2. 内存映射:将代码段和数据段加载到内存中。
  3. 动态链接:如果程序使用了动态链接库(DLL 或 .so),加载器会在运行时将这些库加载到内存并修补地址。
  4. 移交控制权:最后,CPU 跳转到程序的入口点开始执行第一条机器指令。

示例工程

我将分别以Windows 下常用的 MinGW-w64 与 MSVC 这两个工具链,建立简单工程进行讲解。
我将建立一个简单的示例工程,文件结构如下

DEMO/
├── A/
│   ├── a.h
│   └── a.cpp
├── B/
│   ├── b.h
│   └── b.cpp
├── main.cpp
└── build/

内容如下

main.cpp

#include <iostream>
#include <windows.h>
#include "A/a.h"
#include "B/b.h"
int main (void)
{
    std::cout<<"开始测试"<<std::endl;
    Function_A();
    Function_B();
    system("pause");//防止终端一闪而过看不清
    return 0;
}

a.h

#include <iostream>
void Function_A(void);

a.cpp

#include "a.h"
void Function_A(void)
{
    std::cout<<"AAA"<<std::endl;
}

b.h

#include <iostream>
void Function_B(void);

b.cpp

#include "b.h"
void Function_B(void)
{
    std::cout<<"BBB"<<std::endl;
}

build文件夹用来存放生成的.exe

配置文件说明

之后需要在项目根目录下的 .vscode/ 文件夹中建立三个配置文件

c_cpp_properties.json tasks.json launch.json

先说明其作用

c_cpp_properties.json

负责 代码智能感知

告诉 VS Code 的 C/C++ 插件(IntelliSense):

  • 使用哪个编译器?

  • 头文件(.h)在哪里?

  • 用的是 C 还是 C++?什么标准(C++11/17/20)?

  • 定义了哪些宏(#define)?

tasks.json

负责 编译构建

配置 构建任务(Build Task),即VS Code 应该执行什么命令来把源代码变成可执行文件。

launch.json

负责 调试运行

配置 调试器(Debugger) 的行为:

  • 要运行哪个 .exe?

  • 启动前是否先编译?

  • 调试时用控制台还是集成终端?

  • 程序崩溃时是否停在入口?


MinGW-w64 工具链

简介

MinGW-w64(读作 “Minimalist GNU for Windows 64-bit”)是一个开源项目,它把 GNU 编译器套件(GCC) 移植到了 Windows 平台,让你能在 Windows 上使用 gcc / g++ 编译 C/C++ 程序,并生成原生的 .exe 可执行文件。这是 Windows 上配置 C/C++ 开发环境最简单、最常用的工具链之一。

🔧 核心组件

工具作用
gcc.exe编译 C 代码
g++.exe编译 C++ 代码
gdb.exe调试器(支持断点、变量监视等)
ld.exe链接器(将 .o 文件合并成 .exe)
mingw32-make.exe构建工具
下载与安装

注意,如果你已经拥有(比如安装Qt时选择了这个工具链),不需要重复下载。
搜索MinGW-w64

在这里插入图片描述

官方网址: mingw-w64

在这里插入图片描述

下载地址: Pre-built Toolchains - mingw-w64

在这里插入图片描述

选择 Windows 的,选择 MinGW-W64-builds 这个是工具链,下面的 MSYS2 除了工具链还有一些包管理器等,本教程不讲解。

点击后跳转到

在这里插入图片描述

点击后进入其 GitHub 仓库: Releases · skeeto/w64devkit

在这里插入图片描述

本教程是 Windows x86_64 所以选择 w64devkit-x64-…这个下载

它是GitHub 国内下载慢,可以考虑以下手段

  • 使用加速器

  • 复制下载链接到迅雷里下载

我这里使用迅雷下载,十几秒就下载完了

在这里插入图片描述

双击打开后即可自动解压安装

在这里插入图片描述

在这里插入图片描述

加入环境变量(可选)

加入系统的环境变量后,之后写路径啥的会方便些,不必写出完整路径

本教程之后的配置文件会写完整路径,不加入环境变量也可以!

在这里插入图片描述

复制安装路径,加入环境变量

右键此电脑->属性->相关设置中->高级系统设置->环境变量
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Path->编辑->编辑环境变量->加入安装路径 把bin的路径填入 bin文件夹里面是 gcc g++ 这些.exe
在这里插入图片描述
在这里插入图片描述

配置文件创建

然后为工程建立配置文件。

之后几步中,如果你找不到图形界面中点哪里,手动建立对应文件也可以。

创建 c_cpp_properties.json

点击右下角的 C/C++配置,选择配置编辑配置UI,它会自动创建 c_cpp_properties.json

在这里插入图片描述

进入智能感知配置

在这里插入图片描述

这时,会在工程文件夹中建立.vscode\c_cpp_properties.json

填入编译器路径

如果之前加入了环境变量,应当可以自动检测到

在这里插入图片描述

智能感知模式

Windows (x86_64) MinGW-w64 / GCC 应当选择 “windows-gcc-x64”

在这里插入图片描述
包含路径
根据你的工程修改
在这里插入图片描述

还可以在这个界面选择智能感知时的C/C++标准
在这里插入图片描述

c_cpp_properties.json 示例

{
    // 配置数组:可定义多个环境(如 Win32、Linux、Mac)
    "configurations": [ 
        {
            "name": "Win32", // 配置名称,在 VS Code 状态栏可切换;"Win32" 是默认显示名(实际用于 64 位也无妨)
            // 告诉 IntelliSense 在哪些目录中查找头文件(#include 的搜索路径)
            "includePath": [ 
                "${workspaceFolder}/**" // ** 表示递归包含项目根目录下所有子文件夹(包括 A/、B/ 等)
            ],
            // 预定义宏(相当于在代码开头自动加 #define)
            "defines": [ 
                "_DEBUG", // 启用调试模式(常用于条件编译,如 #ifdef _DEBUG)
                "UNICODE", // Windows 编程常用:启用宽字符(wchar_t)版本 API
                "_UNICODE" // 配合 UNICODE,确保 TCHAR 映射为 wchar_t(MinGW 下影响较小,但保留无害)
            ],
            "cStandard": "c11", // 指定 C 语言标准(影响语法高亮和错误检查),可选:c11, c17, gnu11 等
            "cppStandard": "c++14", // 指定 C++ 语言标准,可选:c++14, c++17, c++20, gnu++17 等
            "compilerPath": "D:\\w64devkit\\bin\\g++.exe",
            // 指向实际的 C++ 编译器路径;
            // VS Code 会读取它来获取:
            //   - 默认系统头文件路径(如 /usr/include)
            //   - 内置宏定义(如 __GNUC__)
            //   - ABI 和目标平台信息
            "intelliSenseMode": "windows-gcc-x64" // 智能感知模式
        }
    ],
    "version": 4 // 配置文件格式版本(由 VS Code C/C++ 插件定义,保持为 4 即可)
}
创建 tasks.json

本人没有找到比较好的tasks.json文件模板生成方法,建议直接复制接下来的的示例,然后再根据自己的路径修改。

我们需要判断build文件夹是否存在,然后再输入编译的相关指令,比较复杂,因此我这里先在工程中建立一个window批处理文件build.bat。

它会被tasks.json调用。

如果不这样,需要在tasks.json中输入一个很长的字符串。

build.bat

@echo off
setlocal

:: 获取当前工作目录
set "PROJECT_DIR=%CD%"

:: 构建输出目录
set "BUILD_DIR=%PROJECT_DIR%\build"

:: 确保 build 目录存在
if not exist "%BUILD_DIR%" mkdir "%BUILD_DIR%"

:: 设置 MinGW-w64 的 bin 目录(根据你的实际路径调整)
set "MINGW_BIN=D:\w64devkit\bin"

:: 将 MinGW 加入 PATH(临时)
set "PATH=%MINGW_BIN%;%PATH%"

:: 调用 g++ 编译
g++.exe ^
    -std=c++14 ^
    -g ^
    -O0 ^
    -Wall ^
    -Wextra ^
    -I "%PROJECT_DIR%" ^
    -o "%BUILD_DIR%\demo.exe" ^
    "%PROJECT_DIR%\main.cpp" ^
    "%PROJECT_DIR%\A\a.cpp" ^
    "%PROJECT_DIR%\B\b.cpp"


:: 检查编译是否成功
if errorlevel 1 (
    echo.
    echo 编译失败!
    exit /b 1
)

echo.
echo 编译成功:%BUILD_DIR%\demo.exe

-stdxxx设置C++标准,-Oxx编译器优化等级,-I xxxxx 头文件路径, -o 输出文件路径 源文件路径

相关g++指令不再赘述,还请自行查询。

示例 tasks.json

{
	// VS Code 任务配置文件的版本号(固定为 "2.0.0")
	"version": "2.0.0",
	// 定义一个或多个构建/运行任务
	"tasks": [
		{
			// 任务名称,在 VS Code 的任务列表中显示(如 Ctrl+Shift+P → "Tasks: Run Task")
			"label": "Build Project with g++",
			// 任务类型:使用 shell(如 cmd 或 PowerShell)执行命令
			// 可选值:"shell"(调用系统 shell)、"process"(直接启动进程)
			"type": "shell",
			// 要执行的命令 这里调用批处理文件 build.bat
			"command": "${workspaceFolder}\\build.bat",
			// 任务执行时的环境选项
			"options": {
				// 设置工作目录(Current Working Directory)
				// 编译器将在此目录下查找相对路径文件(如 #include "xxx")
				// 必须设为项目根目录,否则头文件路径会解析错误
				"cwd": "${workspaceFolder}"
			},
			// 错误/警告解析器:告诉 VS Code 如何从编译输出中提取错误信息
			// "$gcc" 是内置的 GCC 错误匹配器,能高亮显示报错行
			"problemMatcher": "$gcc",
			// 将此任务归类为“构建”组,并设为默认构建任务
			// 这样按 Ctrl+Shift+B 会自动运行它
			"group": {
				"kind": "build", // 属于构建任务
				"isDefault": true // 是默认的构建任务(快捷键绑定)
			},
			// 在任务列表中显示的附加说明(可选)
			"detail": "Run build.bat for MinGW-w64"
		}
	]
}
创建 launch.json

左上角,运行和调试->创建 launch.json->C++(GDB/LLDB)

MinGW-w64 应当选择 C++(GDB/LLDB)

在这里插入图片描述

添加配置->C/C++: (gdb) 启动

MinGW-w64 应当选择 C/C++: (gdb) 启动

之后会生成一个模板

在这里插入图片描述

在这里插入图片描述

还需要修改一些路径

要调试的可执行文件路径

      // 要调试的可执行文件路径(必须与 tasks.json 中输出的路径一致)
      "program": "${workspaceFolder}/build/main.exe",

目标的工作目录

      // 程序运行时的工作目录(影响相对路径文件操作,如 fopen("data.txt"))
      "cwd": "${workspaceFolder}",

${fileBasename} 当前文件所在目录的完整路径

${workspaceFolder} 当前工作区(项目)的根目录(即你用 VS Code “打开文件夹” 的那个目录)

MI 调试程序的路径

			// GDB 可执行文件的绝对路径(确保使用 w64devkit 自带的 gdb.exe)
			// 我这里是其完整路径,没有加入系统 PATH
			"miDebuggerPath": "D:/w64devkit/bin/gdb.exe",

我这里希望弹出独立的cmd窗口

			// 是否在外部控制台窗口中运行程序(弹出独立 cmd 窗口)
			// true:适合需要输入(cin/scanf)的程序
			// false(默认):在 VS Code 的 DEBUG CONSOLE 中运行(但无法输入!)
			"externalConsole": true,

示例 launch.json

{
	// 调试配置文件的版本号(由 VS Code C/C++ 插件定义,固定为 "0.2.0")
	"version": "0.2.0",
	// 定义一个或多个调试配置(可在 VS Code 左侧调试面板下拉选择)
	"configurations": [
		{
			// 调试配置的显示名称(出现在 VS Code 调试下拉菜单中)
			"name": "(gdb) 启动",
			// 调试器类型:
			// - "cppdbg":适用于 GDB(Linux/MinGW)或 LLDB(macOS)
			// - "cppvsdbg":仅用于 Windows 上的 Visual Studio 调试器(MSVC)
			// 这里使用 MinGW-w64,必须选 "cppdbg"
			"type": "cppdbg",
			// 调试请求类型:
			// - "launch":启动并调试新程序(最常用)
			// - "attach":附加到已运行的进程
			"request": "launch",
			// 要调试的可执行文件路径(必须与 tasks.json 中输出的路径一致)
			"program": "${workspaceFolder}/build/main.exe",
			// 程序启动时传入的命令行参数(数组形式)
			// 例如:["input.txt", "--verbose"]
			"args": [],
			// 是否在进入 main() 函数第一行时暂停(方便设断点)
			// true:停在 main 开头;false:直接运行直到第一个断点
			"stopAtEntry": false,
			// 程序运行时的工作目录(影响相对路径文件操作,如 fopen("data.txt"))
			"cwd": "${workspaceFolder}",
			// 设置环境变量(格式:[{"name":"KEY","value":"VAL"}])
			// 留空表示继承当前环境
			"environment": [],
			// 是否在外部控制台窗口中运行程序(弹出独立 cmd 窗口)
			// true:适合需要输入(cin/scanf)的程序
			// false(默认):在 VS Code 的 DEBUG CONSOLE 中运行(但无法输入!)
			"externalConsole": true,
			// 使用的调试引擎模式(GDB 或 LLDB)
			// MinGW-w64 必须用 "gdb"
			"MIMode": "gdb",
			// GDB 可执行文件的绝对路径(确保使用 w64devkit 自带的 gdb.exe)
			// 我这里是其完整路径,没有加入系统 PATH
			"miDebuggerPath": "D:/w64devkit/bin/gdb.exe",
			// 启动调试前自动运行的任务(值必须与 tasks.json 中的 "label" 完全一致)
			// 实现“一键 F5:编译 + 调试”
			"preLaunchTask": "Build Project with g++",
			// GDB 启动时执行的初始化命令
			"setupCommands": [
				{
					"description": "为 gdb 启用整齐打印",
					"text": "-enable-pretty-printing",
					"ignoreFailures": true // 即使失败也不报错(兼容旧版 GDB)
				},
				{
					"description": "将反汇编风格设置为 Intel",
					"text": "-gdb-set disassembly-flavor intel",
					"ignoreFailures": true // 即使失败也不报错(兼容旧版 GDB)
				}
			]
		}
	]
}
运行调试

配置完毕,然后即可运行调试

在这里插入图片描述

MSVC 工具链

如果你用过 Visual Studio 开发 C++ 那你有 MSVC 工具链

显然,在Windows X86 电脑上,直接用 Visual Studio 就行了,本文只是想说明 VS Code 确实可以用……

简介

MSVC(Microsoft Visual C++ Compiler) 是微软开发的 C 和 C++ 编译器,是 Visual Studio 集成开发环境(IDE)的核心组件之一。

  • 它的可执行文件叫 cl.exe(“compile and link”)
  • 它是 Windows 平台上最官方、最深度集成的 C++ 编译器
  • 属于 Microsoft C++ 工具链的一部分

🧱 核心组成部分

组件作用
cl.exeC/C++ 编译器前端,负责词法/语法分析、代码生成
link.exe链接器,将 .obj 文件和库合并为 .exe 或 .dll
MSVC STL微软实现的 C++ 标准库(开源在 GitHub:microsoft/STL)
UCRT (Universal C Runtime)Windows 10+ 的 C 运行时库(替代旧的 msvcrt.dll)
调试引擎深度集成 Visual Studio,支持高级调试(内存可视化、并行堆栈等)
下载与安装

略

见 Visual Studio 下载与安装
在这里插入图片描述
在这里插入图片描述

配置文件创建
创建 c_cpp_properties.json

点击右下角的 C/C++配置,选择配置编辑配置UI,它会自动创建 c_cpp_properties.json

在这里插入图片描述

进入智能感知到图形化配置界面

在这里插入图片描述

填入编译器路径

请根据你的安装位置修改
在这里插入图片描述

智能感知模式

Windows (x86_64) MSVC (Visual Studio) 应当选择 “windows-msvc-x64”

在这里插入图片描述

包含路径

根据你的工程修改

在这里插入图片描述

还可以在这个界面选择智能感知时的C/C++标准

在这里插入图片描述

c_cpp_properties.json 示例

{
	"configurations": [
		{
			"name": "Win32",
			"includePath": [
				"${workspaceFolder}/**" // 自动包含所有子目录
			],
			"defines": [],
			"compilerPath": "D:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.44.35207/bin/Hostx64/x64/cl.exe",
			"cStandard": "c17",
			"cppStandard": "c++17",
			"intelliSenseMode": "windows-msvc-x64",
			"configurationProvider": "ms-vscode.cpptools"
		}
	],
	"version": 4
}
创建 tasks.json

找不到比较好的图形界面配置方法,建议直接复制我之后的示例,然后再根据自己的路径修改。

注意一下 MSVC 它,Visual Studio 安装的 C++ 工具链(包括 cl.exe、标准库头文件、Windows SDK、链接器等)不是集中在一个目录,而是分散在多个位置,路径类似:

  • 编译器 (cl.exe):
    C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\<版本>\bin\Hostx64\x64\
  • C/C++ 标准库头文件:
    ...\MSVC\<版本>\include\
  • Windows SDK 头文件:
    C:\Program Files (x86)\Windows Kits\10\Include\<版本>\um\, shared\, ucrt\…
  • 库文件 (.lib):
    分布在 MSVC 目录和 Windows Kits 的 Lib\ 子目录中

👉 这些路径不会自动加入系统 PATH 或环境变量(避免污染全局环境)。

因此,每次要在命令行使用 MSVC 工具链时,必须显式运行 vcvars64.bat

这个windows批处理文件所在位置类似
D:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars64.bat

我们需要初始化环境变量,然后再输入编译的相关指令,比较复杂,因此在工程中建立一个window批处理文件build.bat

它会被tasks.json调用

build.bat

@echo off
setlocal

:: 获取工程所在目录
set "PROJECT_DIR=%CD%"

:: 构建输出目录路径
set "BUILD_DIR=%PROJECT_DIR%\build"

:: 确保 build 目录存在
if not exist "%BUILD_DIR%" mkdir "%BUILD_DIR%"

:: 初始化 MSVC 环境
call "D:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars64.bat"

:: 调用 MSVC 编译器 cl.exe 进行编译和链接
cl.exe ^
  /EHsc ^
  /std:c++17 ^
  /Zi ^
  /W4 ^
  /nologo ^
  /Fe:"%BUILD_DIR%\demo.exe" ^
  /Fd:"%BUILD_DIR%\demo.pdb" ^
  /Fo:"%BUILD_DIR%\\" ^
  "%PROJECT_DIR%\main.cpp" ^
  "%PROJECT_DIR%\A\a.cpp" ^
  "%PROJECT_DIR%\B\b.cpp"

endlocal

tasks.json示例

{
  // VS Code 任务系统的版本号,2.0.0 是当前标准格式
  "version": "2.0.0",

  // 定义一组任务(可以有多个,这里只定义一个)
  "tasks": [
    {
      // 任务在 VS Code 中显示的名称(按 Ctrl+Shift+B 时看到的名字)
      "label": "Build with MSVC",

      // 任务类型:'shell' 表示在系统 shell(如 cmd.exe)中执行命令
      "type": "shell",

      // 要执行的实际命令:
      // 这里调用项目根目录下的 build.bat 脚本进行编译
      // ${workspaceFolder} 是 VS Code 内置变量,代表当前打开的文件夹路径
      "command": "${workspaceFolder}\\build.bat",

      // 额外选项配置
      "options": {
        // 设置命令执行时的工作目录(Current Working Directory)
        // 确保 build.bat 中的 %CD% 或相对路径能正确指向项目根目录
        "cwd": "${workspaceFolder}",

        // 显式指定使用 Windows 的 cmd.exe 作为 shell(而非 PowerShell)
        "shell": {
          // cmd.exe 的完整路径(Windows 系统标准位置)
          "executable": "C:\\Windows\\System32\\cmd.exe",
          // /C 参数表示:“执行命令后关闭 shell”
          // 即运行完 build.bat 就退出,不保持终端打开
          "args": ["/C"]
        }
      },

      // 错误/警告解析器(Problem Matcher):
      // "$msCompile" 是 VS Code 内置的匹配器,能自动识别 cl.exe 输出的
      // 编译错误和警告(如 "error C2065: undeclared identifier"),
      // 并在“问题”面板中高亮显示,支持点击跳转到代码位置
      "problemMatcher": "$msCompile",

      // 将此任务归类为“构建”组,并设为默认构建任务
      "group": {
        // 'kind': 'build' 表示这是构建类任务(Ctrl+Shift+B 会触发它)
        "kind": "build",
        // 'isDefault': true 表示这是默认的构建任务(无需选择,直接运行)
        "isDefault": true
      }
    }
  ]
}
创建 launch.json

左上角,运行和调试->创建 launch.json->C++(Windows)

MSVC 应当选择 C++(Windows)

在这里插入图片描述

添加配置->C/C++: (Windows) 启动

MSVC 应当选择 C/C++: (Windows)

之后会生成一个模板

在这里插入图片描述

在这里插入图片描述

还需要修改一些路径

要调试的可执行文件路径

      // 要调试的可执行文件路径(必须与 tasks.json 中输出的路径一致)
      "program": "${workspaceFolder}/build/demo.exe",

目标的工作目录

      // 程序运行时的工作目录(影响相对路径文件操作,如 fopen("data.txt"))
      "cwd": "${workspaceFolder}",

${fileBasename} 当前文件所在目录的完整路径

${workspaceFolder} 当前工作区(项目)的根目录(即你用 VS Code “打开文件夹” 的那个目录)

再加入

		//在启动调试前,先运行名为 "Build with MSVC" 的任务,去构建
        "preLaunchTask": "Build with MSVC"

示例 launch.json

{
  // launch.json 的 schema 版本(由 VS Code C/C++ 扩展定义)
  // 不需要手动修改,保持默认即可
  "version": "0.2.0",

  // 调试配置列表:可以定义多个(如 Debug/Release、不同程序等)
  "configurations": [
    {
      // 在 VS Code 调试侧边栏中显示的名称
      "name": "(Windows) 启动",

      // 调试器类型:
      // - "cppvsdbg":使用 Visual Studio 的原生调试引擎(推荐用于 MSVC 编译的程序)
      // - "cppdbg":使用 GDB/LLDB 引擎(适用于 MinGW、Linux、WSL 等)
      // ✅ 对于 cl.exe 编译的 .exe,必须用 "cppvsdbg"
      "type": "cppvsdbg",

      // 调试请求类型:
      // - "launch":启动并调试一个新进程(最常用)
      // - "attach":附加到一个已在运行的进程
      "request": "launch",

      // 要调试的可执行文件路径
      // ${workspaceFolder} 是项目根目录
      // 这里指向你 build.bat 生成的 demo.exe
      "program": "${workspaceFolder}/build/demo.exe",

      // 传递给程序的命令行参数(数组形式)
      // 例如:["--input", "file.txt"] 相当于运行 demo.exe --input file.txt
      "args": [],

      // 是否在程序入口点(main 函数)处自动暂停
      // - true:启动后停在 main 第一行(适合检查初始状态)
      // - false:直接运行(默认行为)
      "stopAtEntry": false,

      // 程序运行时的工作目录(Current Working Directory)
      // 影响相对路径文件读写(如 fopen("data.txt", "r"))
      // 通常设为项目根目录,方便访问资源文件
      "cwd": "${workspaceFolder}",

      // 设置额外的环境变量(格式:[{ "name": "KEY", "value": "VAL" }])
      // 一般留空,除非程序依赖特定环境变量
      "environment": [],

      // 控制台输出方式:
      // - "externalTerminal":在独立的 Windows 命令行窗口中运行程序(推荐)
      //   → 支持交互式输入(如 std::cin)、Ctrl+C 中断、完整终端功能
      // - "integratedTerminal":在 VS Code 内置终端中运行
      // - "internalConsole":仅在“调试控制台”输出(不支持输入)
      "console": "externalTerminal",
        
        //在启动调试前,先运行名为 "Build with MSVC" 的任务,去构建
        "preLaunchTask": "Build with MSVC"
    }
  ]
}
运行调试

配置完毕,然后即可运行调试

在这里插入图片描述

后记

如果有什么疑问,请下载资源以参考

评论区交流

还有什么问题可以问问AI,我这个文章就是千问帮着搞的。

对于复杂工程,使用CMake构建更好,之后有时间,我会出个CMake的教程。

参考资料

VSCode 中 C/C++ 安装、配置、使用全攻略:小白入门指南_vscode有自带c++吗-CSDN博客

VS Code 配置 C/C++ 编程运行环境(保姆级教程)_vscode配置c++环境-CSDN博客

最新!MinGW-w64的下载与安装(超详细!!!) - 知乎

VSCode配置C++环境(Windows篇) | 爱编程的大丙

使用的AI

千问-Qwen最新模型体验-通义千问官网

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐