在vscode上使用clangd
本文最后更新于:2022年8月12日 晚上
首先我们先明白一个概念LSP,额,当然不是老色批🤣
LSP(Language Server Protocol)开源的语言服务器协定。由RedHat、Microsoft和 Codenvy 联合推出,可以让不同的程序编辑器与集成开发环境(IDE)方便嵌入各种程序语言,允许开发人员在最喜爱的工具中使用各种语言来撰写程序
而C++的LSP有
- ms-vscode.cpptools
- clangd
- ccls
visual studio code 中微软官方的C/C++插件使用的是第一个,经常出现各种各样的问题,同时代码补全不是跟好用,例如C++ STL 在使用时无法使用括号补全。同时经常出现更新不及时,更改代码前出现的报错有时需要重新打开项目才会消失😢,就很烦,所以这里使用官方推荐的clangd插件进行C/C++补全,静态检查,高亮功能。
1. 备份原有的配置文件
在Windows 10上使用
C/C++调试时默认会自动生成task.json
和launch.json
文件,但有的时候会抽风无法生成launch.json
,这里做一个备份,基本上官方配置复制下来更改一下安装的工具链地址就可以用:配置地址,我做了一些个性化配置。
task.json 相当于输入一段g++命令,对一段C++代码进行编译和执行,launch.json 会每次调用tasks.json
使用这个配置可以在调试的时候自动聚焦到终端,生成的二进制文件会出现在根目录的build文件夹
task.json
1 |
|
launch.json
1 |
|
2. 在Ubuntu中设置
2.1 安装包
1 |
|
2.2 安装vscode 插件

在安装C/C++和clangd插件后,会出现冲突问题,是两个插件补全出现冲突,在setting.json
中添加,关闭自动补全
1 |
|
2.3 使用clang++,lldb
配置方法与正常的配置差不多,有些许修改,需要注意在linux下,二进制文件没有“.exe后缀”
tasks.json
1 |
|
launch.json
1 |
|
2.4 使用g++,gdb
因为我们只关闭了C/C++插件的自动补全功能,所以理论上我们是可以使用官方插件进行调试的,使用clangd写代码,C/C++调试。官方的插件在调试上对内存断点上更加好用

tasks.json
1 |
|
launch.json
1 |
|
由于编译和调试所依赖的工具和插件是不同的,我甚至可以使用clang++编译,gdb调试,只需要将tasks.json
的内容更换为使用clang++时即可
2.5 使用Cmake进行多文件编译
打开一个CMake项目,这是一个简单的项目,只有一个头文件和源文件构成

1 |
|
2.5.1 生成compile_command.json
clangd需要根据该文件获取各个文件的include path,以及编译警告错误之类的,必须要有这个文件
- 在CMakeList.txt中添加即可
1 |
|
- 在build目录下
1 |
|
2.5.2 Debug配置
实际上,由于我们因为只禁用了C/C++的自动补全功能(再次强调😆),所以正常来讲可以忽略这个东西,但是如果完全不用官方这一套的话,还是需要的。我们只需要调试,所以只需要launch.json,将我们之前的launch.json根据Cmake Tools官方文档改一改就可以了
- 使用gdb
1 |
|
- 使用lldb
1 |
|
3. 配置clangd
3.1 setting.json
1 |
|
3.2 .clang-tidy
Ctrl+Shft+p
配置如下内容,官网配置

3.2.1 配置含义
可能官网配置较为繁琐,这里列举了大部分的中文含义和示例代码
1 |
|
3.2.2 导出Clion 2022.1
.clangd
1 |
|
3.3 .clang-format
1 |
|
4. Windows上配置
4.1 工具链安装
不知道大家有没有注意过自己用的工具链版本
较为知名的几个项目:
- MinGW-w64项目多年不更新,gcc版本停留在8.1,与linux下ubuntu20.04 LTS 9.0 ,Arch 11.2差的很远;
- tdm-gcc在停更了好多年之后,更新了10.0版本
推荐以下两种方式
Winlib 主要提供GCC 和 LLVM 在windows下的 使用 基本上上游更新,作者就会编译发布
因为是LLVM官方在windows上似乎只提供了MSVC版本的,所以可能存在问题,我目前使用的版本lldb就存在python依赖问题
MYSY2 模拟Linux环境,使用Pacman 作为包管理器,作为一个曾经在物理机上安装Arch Linux 的人,Pacman 的强大让我念念不忘,可惜的是Linux下没有好用的QQ,微信。Pacman 中有最新的软件包和几乎永远不需要担心依赖和编译问题,在配置环境中带来巨大痛苦的OpenGL,OpenCV,Eigen,甚至是hadoop的安装只需要一条命令,已经有人为你做好了一切,包管理器让更新变得十分容易。
将
msys2 shell
集成在 Windows Terminal中,命令行C:\Users\FengisZZZ\ServerTools\msys\msys2_shell.cmd -msys -defterm -no-start
;集成在VScode中,
1
2
3
4
5
6
7
8
9
10
11
12
13
14"msys2": {
"path": "C:\\Users\\FengisZZZ\\ServerTools\\msys\\usr\\bin\\bash.exe",
"args": [
"--login",
"-i"
],
"env": {
"MSYSTEM": "MINGW64",
"CHERE_INVOKING": "1",
"MSYS2_PATH_TYPE": "inherit"
},
"color": "terminal.ansiYellow",
"icon": "terminal-bash"
},
使用msys2安装工具链的时候,因为clang 和 mingw-w64是两套完全不同的工具链,分别在mingw64,clang64目录下,而且第三方包并不共享,因此推荐安装mingw-w64版的clang,llvm
例如使用tdmgcc64(一个mingw-w64的windows发行版) 编译的opencv在使用clang64文件夹下的clang++是无法通过编译的
1 |
|
安装后发现clang,clang++,clangd都在./mingw64/bin
目录下,./clang64
下都是空目录
记得添加环境变量
4.2 json配置
因为上述安装的包都是为了mingw-w64工具链而服务,所以我们可以使用clang++编译,gdb调试;正常安装clang,mingw-w64则不能如此。
同时还有意外惊喜😄,就是可以将cpp文件命名为中文,只用g++,gdb不能正常打断点调试,而用clang++是可以的。
以下是使用c/c++ 插件
的配置,分别表示使用g++编译,和clang++编译。
1 |
|
1 |
|
未完 待续
附
参考链接:
- Bilibili
VS Code + Clangd + CMake 搭建 C/C++开发环境
- CSDN:
VSCode 配置 C/C++:VSCode + Clang + Clangd + LLDB + CMake + Git