最近要学 CSAPP,考虑到这门神课的 lab,最早跟着数据结构基础 / leetcode 一点简单题敲的时候用的基础的 VSCode & MinGW 的模式不能适配这样的新状态。针对复杂起来的工程,不能再简单的使用 .h 来穿插在一个单独的 .cc 文件当中,所以需要一个构建工具。同时,针对 MinGW 和这套文本编辑器,以后到 lab 很复杂的时候,也在这篇博客里面标记一下。

先从 VSCode 配置 C 说起,毕竟你校一帮人觉得就是纯粹的浪费时间,要让信息不对称的新同学强行咽下 Dev C++ 这颗苦果。作为开发工具界面重度婆罗门的我,即使根本没太多「软件工程」的意识和水平,但得益于好工具带来的惊天动地的效率提升,必须得把它给翻译过来怼你脸上——和这样的虫豸在一起怎么能写好代码呢?(指连工具都非常陈旧,更不用谈现代化的一些东西和学习的方法论)

Using GCC with MinGW

  1. 在 VSCode 上安装 C / C++ 扩展(Ctrl + Shift + X)。接下来的步骤就开始通过 MSYS2 安装编译器 MinGW-x64。
  2. 安装包管理器 MSYS2。
  3. 设置包管理器的 清华 MSYS2 镜像 、在 MSYS2 上安装 MinGW-W64,注意每个必需的步骤和 pacman 命令,尤其是其中的第 7 步。
  4. 配置环境变量:在用户变量里面的 Path 中添加 Mingw-w64 的位置。按照上面的话就是 C:\msys64\mingw64\bin
  5. 分别检查 g++ --versiongdb --version

构建

在这个时候就可以通过创建 tasks.json 文件来告诉 VSCode 如何构建程序。

在 VSCode 中,选择 终端 > 配置默认生成任务。选择「g++.exe 生成活动文件」。这会在.vscode文件夹中创建一个 tasks.json,并且在编辑器中开启。

该文件内容应该类似于如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
{
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: g++.exe 生成活动文件",
"command": "C:\\msys64\\mingw64\\bin\\g++.exe",
"args": [
"-fdiagnostics-color=always",
"-g",
"${file}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "调试器生成的任务。"
}
],
"version": "2.0.0"
}

其中 command 设置指定要运行的程序(MinGW 的 g++ 位置)。

isDefault 指定在按 Ctrl + Shift + B 构建时,是否按上面的来运行。设置成 false 也可以手动运行。

调试

在主菜单选择运行 > 添加配置,然后选择 C++ (GDB / LLDB)。下拉列表里选择 g++.exe 生成和调试活动文件,开始把这一过程自动化。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "g++.exe - 生成和调试活动文件",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "C:\\msys64\\mingw64\\bin\\gdb.exe",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "C/C++: g++.exe 生成活动文件"
}
]
}

按 F5 调试。然后可以设置断点、单步执行等各种功能。看微软自己的说明就行。

使用 CMake

按照教程配置即可。如果找不到 CMake Generator 就在 settings.json & cmake-tools-kits.json 里面分别设置:

1
2
3
4
5
6
{
"cmake.mingwSearchDirs": [
"C:\\mingw-w64\\mingw64\\bin"
],
"cmake.generator": "MinGW Makefiles"
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
...
{
"name": "GCC 7.2.0",
"compilers": {
"C": "C:\\mingw-w64\\mingw64\\bin\\gcc.exe",
"CXX": "C:\\mingw-w64\\mingw64\\bin\\g++.exe"
},
"preferredGenerator": {
"name": "MinGW Makefiles"
},
"environmentVariables": {
"CMT_MINGW_PATH": "C:\\mingw-w64\\mingw64\\bin"
}
},
...