VS Code 下 clangd 配置流程

是时候将 VS Code 里的 Microsoft C/C++插件换成 clangd 了!

最近在改 Linux 内核,之前使用的插件一直是 Microsoft C/C++,但是该插件在大型项目中的使用体验非常差,不仅跳转不准确,而且大部分情况下处于卡顿状态。在查阅网络后,发现了曾经被朋友(70)推荐过的 clangd 插件,经过一番测试,发现 clangd 插件的使用体验非常好

什么是 clangd?

官网链接:https://clangd.llvm.org/

官网给出的介绍:

clangd understands your C++ code and adds smart features to your editor: code completion, compile errors, go-to-definition and more.

clangd 理解你的 C++ 代码,并为你的编辑器添加智能功能:代码完成、编译错误、跳转到定义等。

具体而言 clangd 会根据编译过程生成的编译数据库(compile_commands.json)来解析代码,从而实现智能功能。编译数据库里面包含了编译过程中用到的所有编译选项,包括头文件路径、库文件路径、编译标志等。这使得 clangd 可以准确地解析代码,从而实现智能功能。

需要的工具

下面给出的是传统基于 makefile 编译的使用方法,使用 cmake 的话,bear 工具是非必须的。由于 Linux 内核编译未使用 cmake,因此我也没测试过其他方法,所以这里不再介绍

bear

bear 是一个用于生成编译数据库的工具,它可以在编译过程中自动生成编译数据库

在 Ubuntu 中,可以使用以下命令安装 bear:

1
sudo apt-get install bear

clangd

clangd 是 clang 工具链中的一个组件,它是 clangd 插件的后端。
在 Ubuntu 中,可以使用以下命令安装 clangd:

1
sudo apt-get install clangd

clangd 插件

clangd 插件是 VS Code 中的一个插件,它可以使用 clangd 作为后端来提供智能功能

在 VS Code 的扩展商店中搜索 clangd 插件,然后安装即可

网上的教程给出了很多 clangd 需要修改的配置,但我经过测试,发现这些配置都不是必须的,只要安装了 clangd 插件,就可以正常使用 clangd 了

注:一定要记得把 Microsoft C/C++插件禁用,一山不容二虎!!!

开始使用

clangd 插件安装完成后,其实在阅读代码时,就已经可以使用 clangd 提供的智能功能了,不过对于大型项目,还是需要生成编译数据库才能保证智能功能的准确性

生成编译数据库

方法十分简单,只需要在编译命令前加上 bear 即可

1
2
3
4
5
6
7
8
9
10
11
12
# 低版本bear的使用方法
bear <编译命令>
# 高版本bear的使用方法
bear -- <编译命令>

# 例如,编译Linux内核
# 原来的编译命令
make -j`nproc`
# 加上bear的编译命令
bear make -j`nproc`
# 或者(对于高版本的bear而言)
bear -- make -j`npr oc`

编译完成后,会在当前目录下生成一个 compile_commands.json 文件,这就是编译数据库

需要注意的是,每次编译都会覆盖原来的编译数据库,如果 compile_commands.json 文件为空,可能是此次编译没有编译新的文件,所以 bear 什么都没记录到,导致覆盖了原来的编译数据库

当编译数据库生成后,就可以使用 clangd 插件提供的智能功能了


VS Code 下 clangd 配置流程
http://ciliphen.github.io/VS-Code下clangd配置流程/
作者
Felix
发布于
2025年5月20日
更新于
2025年6月25日
许可协议