VS Code 下 clangd 配置流程
是时候将 VS Code 里的 Microsoft C/C++插件换成 clangd 了!
最近在改 Linux 内核,之前使用的插件一直是 Microsoft C/C++,但是该插件在大型项目中的使用体验非常差,不仅跳转不准确,而且大部分情况下处于卡顿状态。在查阅网络后,发现了曾经被朋友(70)推荐过的 clangd 插件,经过一番测试,发现 clangd 插件的使用体验非常好
什么是 clangd?
官网给出的介绍:
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 |
|
clangd
clangd 是 clang 工具链中的一个组件,它是 clangd 插件的后端。
在 Ubuntu 中,可以使用以下命令安装 clangd:
1 |
|
clangd 插件
clangd 插件是 VS Code 中的一个插件,它可以使用 clangd 作为后端来提供智能功能
在 VS Code 的扩展商店中搜索 clangd 插件,然后安装即可
网上的教程给出了很多 clangd 需要修改的配置,但我经过测试,发现这些配置都不是必须的,只要安装了 clangd 插件,就可以正常使用 clangd 了
注:一定要记得把 Microsoft C/C++插件禁用,一山不容二虎!!!
开始使用
clangd 插件安装完成后,其实在阅读代码时,就已经可以使用 clangd 提供的智能功能了,不过对于大型项目,还是需要生成编译数据库才能保证智能功能的准确性
生成编译数据库
方法十分简单,只需要在编译命令前加上 bear 即可
1 |
|
编译完成后,会在当前目录下生成一个 compile_commands.json 文件,这就是编译数据库
需要注意的是,每次编译都会覆盖原来的编译数据库,如果 compile_commands.json 文件为空,可能是此次编译没有编译新的文件,所以 bear 什么都没记录到,导致覆盖了原来的编译数据库
当编译数据库生成后,就可以使用 clangd 插件提供的智能功能了