VSCode 配置 C/C++:VSCode + Clang + Clangd + LLDB + CMake + Git
VSCode + GCC + GDB + Git进行学习,翻阅韩骏老师的《Visual Studio Code 权威指南》时,发现他在C++栏目里推荐了名为「vscode-clangd」的插件(已改名为clangd)。
后配置相关插件时遇到诸多问题,查阅不少文章、文档,经几天才配置满意。想到可能有同道会遇到同样的问题,故而写下本文章。
文章主旨是为初学C++的人简易地配置出一个满意的编程环境,不会有CMake、Git等的详细教程。我认为这就像婴儿学步一样:婴儿练习的是跑步,经历多次跌倒后很快便学会了走路,借助学步车的反而学得很慢。
——我想提供的是「助跑器」,而不是「学步车」。
由于仅从今年4月开始学习,会存在很多疏漏和不够专业的地方,还望海涵。
官方文档配置好的 VSCode 相比拥有的优势
- 代码拥有更加丰富的颜色。我利用 VSCode Default Dark+ 主题自带的代码颜色的互补色、相近色,为「类型参数」、「成员函数」、「成员变量」、「函数参数」等与「类」、「自动变量」的颜色作了区分。
- 相对更加精准的「功能」、「转到定义」、「重命名符号」等功能。
- Clang-Tidy提供了强大的「静态检查」支持,并对于部分代码提供「快速修复」。具体请见Clang-Tidy Checks。这里我主要添加了对于「Google 开源项目风格指南(有中文版,但翻译版本滞后,需注意)」「Cpp Core Guidelines」和性能、潜在的bug、移植性、现代C++的检查。
- 自动添加头文件。对于建议中的项会即时自动添加头文件,导航条会自动下移(观察行号)隐藏添加的头文件。
- 利用「Git」进行版本管理。
- 通过「CMake」实现项目管理。
vscode-lldb 在 GitHub 的 Issues 中给出的静态链接相关库」和「Clang 编译器用户手册中给出的将 -g 改为 -glldb」等方法,最终无果。
官方网站获取
下载安装包并安装即可,略。
《VSCode官网下载缓慢或下载失败的解决办法》
这里给出 x86_64 1.60.0 版本的下载链接。
官方网站获取
下载安装包并安装即可,略。
清华大学开源软件镜像站获取
进入清华大学开源软件镜像站,点击右侧的「获取下载链接」,切换到「应用软件」即可找到。
官方网站获取
下载安装包并安装即可,略。
清华大学开源软件镜像站获取
进入清华大学开源软件镜像站,点击右侧的「获取下载链接」,切换到「应用软件」即可找到。
安装时,切换 Git 的默认编辑器为 VSCode。
vscode-lldb 用户手册)
- /********
- * LLDB *
- ********/
- // LLDB 指令自动补全
- "lldb.commandCompletions": true,
- // LLDB 指针显示解引用内容
- "lldb.dereferencePointers": true,
- // LLDB 鼠标悬停在变量上时预览变量值
- "lldb.evaluateForHovers": true,
- // LLDB 监视表达式的默认类型
- "lldb.launch.expressions": "simple",
- // LLDB 不显示汇编代码
- "lldb.showDisassembly": "never",
- // LLDB 生成更详细的日志
- "lldb.verboseLogging": true,
Fira Code 字体。
然后配置如下:
- /********
- * Font *
- ********/
- // 输出窗口
- "[Log]": {
- // 字体大小
- "editor.fontSize": 15
- },
- // CodeLens的字体系列: Fira Code Two iScript
- "editor.codeLensFontFamily": "Fira Code",
- // 字体系列: Fira Code Two iScript
- "editor.fontFamily": "Fira Code",
- // 启用连字体
- "editor.fontLigatures": true,
- // 字体大小
- "editor.fontSize": 16,
- // 集成终端字体大小
- "terminal.integrated.fontSize": 14,
VSCode 配置 C/C++ 终极解决方案:vs code + clang + clangd + lldb (MacOS利用完整 clang-llvm 工具链)。
文件夹命名规范源自 Google 开源项目代码指南,戳此为中文版,但翻译版本滞后,需注意。
当然,未用粗体标出的所有文件/文件夹名都可自定义。
我们在电脑某处新建一个文件夹「code」,专用于编程;在「code」文件夹中新建一个文件夹「cpp」,用于C++编程。
在「VSCode」中选择「文件」-「将文件夹添加到工作区...」,将「cpp」文件夹添加进来,此后我们可以通过「文件」-「工作区另存为...」来保存该工作区以便后序使用以及单独配置、安装插件等。
接下来我们按照自己的需要新建文件夹,比如:
我打算新建一个「practice」文件夹用于学习书上例题、习题,在「practice」内按照再书籍名称、目录细分子文件夹。
同时新建一个「gsl」文件夹,在里面存放「Cpp Core Guidelines」使用的轻量库GSL: Guidelines support library——一个只需包含头文件,无需链接的库。
(这里是为了说明,碰巧这个库在 MSYS2 中无法下载,你也可以下载后把「gsl」文件夹放在「MSYS2 安装路径\clang64\include」里作为「系统头文件」)

接下来我们考虑一件事:如何编译链接、调试代码?
虽然接下来会用 CMake 来管理整个工作区,但我并不打算借助CMake来负责编译链接代码(这也是个一旦入门就很简单的问题),CMake 在这里的作用仅仅是支撑框架、为 Clangd 提供「compile_commands.json」以分析多文件项目。
如果你想要学习如何通过CMake来进行编译、链接,请在看完本文章后,浏览最后的-7- 参考。
我们在根目录新建文件夹「.vscode」,在其内新建全名为「tasks.json」(任务)和全名为「launch.json」(调试配置)的文件。

老样子,我会附出代码和对应注释,如果你想真正理解,就需要翻阅更多资料了。
tasks.json:
额外的,对于 gsl 库,在参数中加入"-I${workspaceFolder}\\gsl"(-大写的i)(include)
由于 gsl 库只有头文件,故无需再参数中加入"-lgsl"(-小写的L)(link)来链接
- {
- "tasks": [
- {
- "type": "shell",
- "label": "Clang++: 编译单文件",
- // 编译器路径
- "command": "C:\\msys64\\clang64\\bin\\clang++.exe",
- // 编译器后附的参数,反映在终端里即"clang+ arg1 arg2 arg3..."
- "args": [
- // 编译的文件
- "${fileDirname}\\${fileBasenameNoExtension}.cc",
- // 生成文件到 build 文件夹中,文件名为debug.exe
- "-o",
- "${workspaceFolder}\\build\\debug.exe",
- // 启用调试(debug)
- "-g",
- // 启用所有诊断,不过可能会因为一些无伤大雅的问题而无法编译
- // 比起 -Weverything 这是 Clang 编译器用户手册中推荐的方式
- "-Wall",
- "-Wextra",
- // 多线程支持
- "-pthread",
- // 使用 LLVM lld 链接器而不是默认链接器
- "-fuse-ld=lld",
- // 启用 debug 信息优化
- "-fstandalone-debug",
- // 诊断信息着色
- "-fcolor-diagnostics",
- // 分析所有注释(这其实只需告诉 Clangd ,即添加到 compile_commands.json 中)
- // Clang 默认只分析 Doxygen 风格("/**", "///"开头)的注释
- "-fparse-all-comments",
- // 设置 C++ 的标准库为 libc++: Clang 对应的标准库
- "-stdlib=libc++",
- // 设置 C++ 版本为 c++20
- "-std=c++20",
- // 为给定环境生成代码
- "--target=x86_64-w64-mingw",
- ],
- "options": {
- // Clang 的启动路径
- "cwd": "${workspaceFolder}"
- },
- "problemMatcher": ["$gcc"],
- "group": {
- "kind": "build",
- "isDefault": true
- },
- "presentation": {
- "echo": true,
- // 执行任务时是否跳转到终端面板,可以为always,silent,never。具体参见VSC的文档,即使设为never,手动点进去还是可以看到
- "reveal": "always",
- // 设为true后可以使执行task时焦点聚集在终端,但对编译C/C++来说,设为true没有意义
- "focus": false,
- // 不同的文件的编译信息共享一个终端面板
- "panel": "shared"
- },
- "detail": "Clang++: 编译单个文件"
- },
- {
- "type": "shell",
- "label": "Clang++: 编译多文件",
- "command": "C:\\msys64\\clang64\\bin\\clang++.exe",
- "args": [
- // '*'是通配符
- "${fileDirname}\\*.cc",
- "-o",
- "${workspaceFolder}\\build\\debug.exe",
- "-g",
- "-Wall",
- "-Wextra",
- "-pthread",
- "-fuse-ld=lld",
- "-fstandalone-debug",
- "-fcolor-diagnostics",
- "-fparse-all-comments",
- "-stdlib=libc++",
- "-std=c++20",
- "--target=x86_64-w64-mingw",
- ],
- "options": {
- "cwd": "${workspaceFolder}"
- },
- "problemMatcher": ["$gcc"],
- "group": {
- "kind": "build",
- "isDefault": true
- },
- "presentation": {
- "echo": true,
- "reveal": "always",
- "focus": false,
- "panel": "shared"
- },
- "detail": "Clang++: 编译当前文件所在目录里所有文件"
- }
- ],
- "version": "2.0.0"
- }
launch.json:
- {
- // 使用 IntelliSense 了解相关属性。
- // 悬停以查看现有属性的描述。
- // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
- "version": "0.2.0",
- "configurations": [
- {
- "name": "LLDB: 生成和调试单文件",
- "type": "lldb",
- "request": "launch",
- "program": "${workspaceFolder}\\build\\debug",
- "args": [],
- "stopOnEntry": false,
- "cwd": "${fileDirname}",
- "internalConsoleOptions": "neverOpen",
- "environment": [],
- "externalConsole": false,
- "preLaunchTask": "Clang++: 编译单文件"
- },
- {
- "name": "LLDB: 生成和调试多文件",
- "type": "lldb",
- "request": "launch",
- "program": "${workspaceFolder}\\build\\debug",
- "args": [],
- "stopOnEntry": false,
- "cwd": "${fileDirname}",
- "internalConsoleOptions": "neverOpen",
- "environment": [],
- "externalConsole": false,
- "preLaunchTask": "Clang++: 编译多文件"
- },
- {
- "name": "LLDB: 调试已编译的 debug.exe",
- "type": "lldb",
- "request": "launch",
- "program": "${workspaceFolder}\\build\\debug",
- "args": [],
- "stopOnEntry": false,
- "cwd": "${fileDirname}",
- "internalConsoleOptions": "neverOpen",
- "environment": [],
- "externalConsole": false,
- }
- ]
- }
配置好后,你可以点击「终端」-「运行生成任务...」或Ctrl + Shift + B运行任务,这会同注释一样,编译你打开的文件,并输出为工作区根目录下的 debug.exe。
之后(或你可以同时进行),你可以点击「运行」-「启动调试」或 F5 进行调试,要更换调试配置,点击左侧「运行和调试」即可在侧边栏上方更改了。
更多的参数请参考 Visual Studio Code Variables Reference 和 Clang 编译器用户手册。
.gitignore
VSCode 快捷键 或 「文件」-「首选项」-「键盘快捷方式」):
Get Started with C++ and Mingw-w64 in Visual Studio Code
Get Started with C++ and Mingw-w64 in Visual Studio Code
CMake简明教程 实例工程演示(含字幕)
- https://blog.csdn.net/tyKuGengty/article/details/120119820?spm=1035.2023.3001.6557&utm_medium=distribute.pc_relevant_bbs_down.none-task-blog-2~default~OPENSEARCH~default-2.nonecase&depth_1-utm_source=distribute.pc_relevant_bbs_down.none-task-blog-2~default~OPENSEARCH~default-2.nonecase