Windows 下 VS code 配置 C/C++ 环境
本文最后更新于:2022年6月28日星期二下午5点35分
阅读本文后应该可以顺利的在 Windows 系统下配置好 VS code 的 C/C++ 环境。
若是继续快速配置环境,可直接到 可直接使用的配置文件 处复制代码到对应文件,然后即可使用。
前提条件
默认已经安装好 VS code 和 Windows 下的 C/C++ 编译器 —— MinGW。
若是未能安装,那就自行安装吧。(自己找教程去)
(`ヮ´ ) 开摆!
安装好了的话,那就开整。
ᕕ( ᐛ )ᕗ
所需插件
配置环境只需要两个插件:
C/C++: 让VS code支持C/C++语法和编译调试C/C++ Extension Pack: 暂时不知道
基础环境配置
配置好 C/C++ 环境大致也就需要几个步骤:
使用 VS code 打开一个文件夹作为工作路径
该文件夹可以包含子文件夹,或是创建子文件夹,配置好环境后,该文件夹会多一个 .vscode,该文件夹会有几个 json 文件。
在该文件夹目录中创建 C/C++ 文件,并进行编辑
简单的编辑一下就好,比如输出个 Hello World。
首先进行配置生成任务
选择已经编辑好的 C/C++ 文件,点击顶部菜单栏的 终端(T) > 配置任务。

在选择 C/C++: gcc.exe 生成活动文件。
因为自己使用
C文件进行配置任务,因为配置任务时显示的是gcc.exe。
若是使用C++文件进行配置任务,会显示g++.exe。gcc.exe是C的编译器g++.exe是C++的编译器,但是也可以编译C
不过这一点没什么大问题,都可以在后续的json文件中修改

之后会自动生成一个 tasks.json 文件,位于 .vacode 文件夹,如图:

进入 tasks.json:

其中:
type: 要自定义的任务类型
可支持类型:cppbuild,shell,process.label: 任务名称。即是你将在任务列表中看到的值(就是上上上图中可见的:C/C++:gcc.exe 生成活动文件);你可以给它取任何你喜欢的名字。
该值还和后续调试任务有关
command: 执行编译器或编译脚本的路径。
args: 其他要传给编译器或者编译脚本的参数。
options:其他命令选项。cwd: 已执行程序或脚本的当前工作目录。如果省略,则使用当前代码的工作区根。
problemMatcher: 要使用的问题匹配程序。可以是一个字符串或一个问题匹配程序定义,也可以是一个字符串数组和多个问题匹配程序。
group: build: 将任务标记为可通过“运行生成任务”命令访问的生成任务。
detail: 任务的其他详细信息。
tasks.json:
{
"version": "2.0.0",
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: gcc.exe 生成活动文件",
"command": "C:/MinGW/bin/gcc.exe",
"args": [
"-fdiagnostics-color=always", // 彩色警告
"-g", // 编译器编译时,产生调试信息
"${file}", // 当前文件名(含有文件路径)
"-o", // 编译时输出的位置
"${fileDirname}/${fileBasenameNoExtension}.exe"
// 编译输出的可执行文件
],
"problemMatcher": [
"$gcc"
],
"group": "build",
"detail": "编译器: C:/MinGW/bin/gcc.exe"
}
]
} 然后点击 终端(T) > 运行生成任务,如图:
当然可以使用快捷键
Shift + Ctrl + B,快速运行生成任务。

此时,VS code 下部的终端就会显示 Executing task, 即开始编译 C 文件并获得 exe 文件。
从图中可见,运行的任务将 tasks.json 中的部分内容显示出来。
如:
- label
- 编译的指令
成功执行指令后,会显示
生成已成功完成。
未能成功执行时,则会显示错误信息。

成功之后,在文件夹中会多出对应的 exe 文件,如图:

强调一下,将上述任务完成后,我们只是利用 tasks.json 配置文件将 C 文件编译成了可执行的 exe 文件后续没有执行 该 exe 文件。想要查看运行结果的话:有两种办法:
- 在 VS code 的终端中输入相应的指令以执行文件
- 到对应的文件夹中找到该 exe 文件,直接执行。
若是需要对代码进行调试,就需要配置接下来的 launch.json 文件。
其次进行配置调试任务
点击 运行(R) > 添加配置,如图:

再次点击图中选项
由于不明原因,我这点击该选项后,直接生成了 launch.json 文件,但是是空的,和其他教程不一样,不过问题不大,就是配置复杂了一点。
↙(`ヮ´ )↗ 开摆!

生成 launch.json 文件。

空的?没事,点击右边的 添加配置,选择 C/C++: (gdb) 启动。
之所以选择该选项,是在我尝试了各选项的配置后做出的决定。
原因吗:
- 功能刚好,基本满足要求
- 没有复杂
(可能无用的)的配置选项

然后生成的配置文件大致如图所示,不过还不能直接用,还需要修改其中部分字段。

各字段的作用:
name: 配置名称,用于显示在启动配置的下拉菜单中。type: 配置类型。request: 请求配置类型。可是启动或附加,对应launch和attach。program: 程序可执行的完整路径。args: 传递给程序的命令行参数。stopAtEntry: 可选参数。如果是为true,则调试程序就会在目标的入口点处停止。如果传递了processId,则不起任何作用。cwd: 目标的工作目录。environment: 要添加到程序环境的环境变量。externalConsole: 如果为true,则为调试对象启动控制台;为false,则会在linux和Windows上显示在集成控制台中。意思就是:
true: 额外开启一个控制台来显示结果。false: 直接在 VS code 的集成终端显示结果。MIMode: 指示MIDebugEngine要连接到的控制台调试程序。允许的值,gdb、lldb。miDubuggerPath:MI调试程序(如gdb)的路径。如若未指定(如gdb.exe),将首先在路径中搜索调试程序。setupCommands: 为了安装基础调试程序而执行一个或多个GDB/LLDB命令。description: 此命令的可选说明。text: 要执行的调试命令。ignoreFailures: 如果为true,则会忽略该命令执行失败。默认值:false。
对 program、miDebuggerPath、externalConsole 等字段进行修改后。
可得正常使用的 launch.json:
在该文件中,加了一新的字段
preLaunchTask,用于调试时从新生成 exe 文件,并根据新的 exe 文件进行调试。
否则,在对代码进行修改后,直接使用调试功能,你会发现,执行的是之前的程序,而非修改后的程序。preLaunchTask: 调试会话开始前要运行的任务。
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) 启动",
"type": "cppdbg",
"preLaunchTask": "C/C++: gcc.exe 生成活动文件", // 在 launch 之前的任务名,
// 即 在launch 之前先执行 tasks.json 的任务
// 用于调试时从新生成 exe 文件,并根据新的 exe 文件进行调试
// 因而该字段内容需和 tasks.json 中的 label 一样,如此才能正确的先生成再调试
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"miDebuggerPath": "C:/MinGW/bin/gdb.exe",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "将反汇编风格设置为 Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
]
}
]
} 此时会到 C 文件,就可以点击 运行(R) > 启动调试 来调试程序,快捷键:F5,或是 运行(R) > 以非调试模式运行 来运行程序(不调试),快捷键:Ctrl + F5。结果如图:

至此,Windows 系统下 VS code 的 C/C++ 环境算是配置完成了。
好耶!
ᕕ( ᐛ )ᕗ
进阶环境配置
我所谓的进阶配置,主要指的是,对 tasks.json 中使用更多的变量参数。
预定义变量 Predefined variables
支持以下预定义变量:
${workspaceFolder}- 在VS Code中打开的文件夹的路径${workspaceFolderBasename}- 在VS Code中打开的文件夹的名称,不带任何斜线 (/)${file}- 当前打开的文件${fileWorkspaceFolder}- 当前打开文件的工作区文件夹${relativeFile}- 当前打开的相对于workspaceFolder的文件${relativeFileDirname}- 当前打开文件相对于workspaceFolder的目录名${fileBasename}- 当前打开文件的基本名称${fileBasenameNoExtension}- 当前打开的文件的基本名称,没有文件扩展名${fileDirname}- 当前打开文件的目录名${fileExtname}- 当前打开文件的扩展名${cwd}- 启动VS Code时任务运行器的当前工作目录${lineNumber}- 活动文件中当前选定的行号${selectedText}- 活动文件中当前选定的文本${execPath}- 正在运行的VS Code可执行文件的路径${defaultBuildTask}- 默认构建任务的名称${pathSeparator}- 操作系统用来分隔文件路径中的组件的字符
预定义变量示例 Predefined variables examples
假设您有以下要求:
- 位于
/home/your-username/your-project/folder/file.ext的文件在您的编辑器中打开; - 目录
/home/your-username/your-project作为您的根工作区打开。
因此,每个变量都将具有以下值:
${workspaceFolder}-/home/your-username/your-project${workspaceFolderBasename}-你的项目${file}-/home/your-username/your-project/folder/file.ext${fileWorkspaceFolder}-/home/your-username/your-project${relativeFile}-folder/file.ext${relativeFileDirname}-folder${fileBasename} - file.ext${fileBasenameNoExtension}-file${fileDirname}-/home/your-username/your-project/folder${fileExtname}-.ext${lineNumber}- 光标的行号${selectedText}- 在代码编辑器中选择的文本${execPath}- Code.exe 的位置${pathSeparator}-/在 macOS 或 linux 上,\在 Windows 上
Tip:
在 tasks.json 和 launch.json 的字符串值中使用 IntelliSense 以获取预定义变量的完整列表
每个工作区文件夹范围内的变量 Variables scoped per workspace folder
通过将根文件夹的名称附加到变量(用冒号分隔),可以访问工作区的同级根文件夹。 如果没有根文件夹名称,则该变量的作用域为使用它的同一文件夹。
例如,在具有文件夹 Server 和 Client 的多根工作区中,${workspaceFolder:Client} 指的是 Client 根的路径。
环境变量 Environment variables
您还可以通过 ${env:Name}
语法(例如,${env:USERNAME})引用环境变量。
{
"type": "node",
"request": "launch",
"name": "Launch Program",
"program": "${workspaceFolder}/app.js",
"cwd": "${workspaceFolder}",
"args": ["${env:USERNAME}"]
}可直接使用的配置文件
PS:
该配置文件暂时仅是支持单个文件的编译
多个文件的编译请详细阅读本篇文章
简要介绍一下两个文件表示的工作流程:
tasks.json是将 C/C++ 文件编译成 exe 文件,其路径与 C/C++ 文件相同,即在同一文件夹launch.json会先将文件编译成 exe 可执行文件,然后再进行调试
所以,使用流程:
- 在工作文件夹下创建
.vscode文件夹, - 再在
.vscide下创建俩文件,并将下述代码复制进去tasks.jsonlaunch.json
- 按
F5进行调试 - 按
Ctrl + F5非调试运行
tasks.json:
{
"version": "2.0.0",
"tasks": [
{
"type": "cppbuild",
"label": "g++.exe 生成活动文件",
"command": "C:/MinGW/bin/g++.exe", // 编译器路径
// 需要自行修改
"args": [
"-fdiagnostics-color=always",
"-g",
"${file}",
"-o", // 编译时输出的位置
"${fileDirname}/${fileBasenameNoExtension}.exe"
// 编译输出的可执行文件
],
"problemMatcher": [
"$gcc"
],
"group": "build",
"detail": "编译器: C:/MinGW/bin/g++.exe"
}
]
}launch.json:
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) 启动",
"type": "cppdbg",
"preLaunchTask": "g++.exe 生成活动文件", // 在 launch 之前的任务名,
// 即 在launch 之前先执行 tasks.json 的任务
// 用于调试时从新生成 exe 文件,并根据新的 exe 文件进行调试
// 因而该字段内容需和 tasks.json 中的 label 一样,如此才能正确的先生成再调试
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"miDebuggerPath": "C:/MinGW/bin/gdb.exe", // 调试器的路径
// 需要自行修改
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "将反汇编风格设置为 Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
]
}
]
}ᕕ( ᐛ )ᕗ
现在你就可以畅想 vscode 的 C 语言编程了。