补充更多的 Clangd 使用方法。
Signed-off-by: rick.chan <cy@haoan119.com>
This commit is contained in:
parent
4e7e6472f9
commit
1a79bbd87f
|
@ -1,10 +1,17 @@
|
|||
# VSCode 使用 Clangd 插件
|
||||
|
||||
安装 clangd (LLVM) 插件。
|
||||
Clangd 是一个基于 Clang 的语言服务器,它提供了代码智能感知和导航功能。通过与 VSCode 集成,可以实现以下功能:
|
||||
|
||||
使用 .clangd 或 .vscode/settings.json 进行项目配置。
|
||||
- 代码补全和自动提示:Clangd 可以根据代码上下文提供准确的补全建议和自动提示,帮助开发者快速编写代码。
|
||||
- 代码跳转和导航:Clangd 可以识别代码中的符号引用、函数调用等,并支持跳转到定义、查看声明等操作,便于阅读和理解复杂的内核源代码。
|
||||
- 实时错误和警告检查:Clangd 可以实时检查代码中的语法错误、潜在问题和警告信息,帮助开发者及早发现和修复问题。
|
||||
- 重构支持:Clangd 提供了一些重构功能,如重命名变量、提取函数等,可以简化代码重构的过程。
|
||||
|
||||
## .clangd
|
||||
在 VSCode 中使用 Clangd 需要先安装 clangd (LLVM) 插件,然后使用 .clangd 或 .vscode/settings.json 进行项目配置。
|
||||
|
||||
## 1. 基本使用配置
|
||||
|
||||
### 1.1. 使用 .clangd 文件方式
|
||||
|
||||
通过:
|
||||
|
||||
|
@ -15,6 +22,13 @@ Ctrl+Shift+P -> clangd: open project configuration file
|
|||
打开项目 .clangd 文件, 参考格式如下:
|
||||
|
||||
```clangd
|
||||
# 提示嵌入,不使用函数参数嵌入提示
|
||||
#InlayHints:
|
||||
# Designators: Yes
|
||||
# Enabled: Yes
|
||||
# ParameterNames: No
|
||||
# DeducedTypes: Yes
|
||||
|
||||
CompileFlags:
|
||||
Add:
|
||||
- -xc
|
||||
|
@ -38,7 +52,18 @@ CompileFlags:
|
|||
|
||||
-I 为 gcc 指定库头文件路径的参数。
|
||||
|
||||
## .vscode/settings.json
|
||||
#### 1.1.1 Qt 的 .clangd 配置参考
|
||||
|
||||
```clangd
|
||||
CompileFlags:
|
||||
Add:
|
||||
- -xc++
|
||||
- -I/usr/include/aarch64-linux-gnu/qt5
|
||||
- -I/usr/include/aarch64-linux-gnu/qt5/QtCore
|
||||
- -I/usr/include/aarch64-linux-gnu/qt5/QtWidgets
|
||||
```
|
||||
|
||||
### 1.2. 使用 .vscode/settings.json 方式
|
||||
|
||||
创建:.vscode/settings.json 文件,参考配置格式如下:
|
||||
|
||||
|
@ -51,7 +76,70 @@ CompileFlags:
|
|||
}
|
||||
```
|
||||
|
||||
## clang 参数
|
||||
### 1.3. .clang-format 文件
|
||||
|
||||
- -xc: 使用 C 文件;
|
||||
- -xc++: 使用 C++ 文件。
|
||||
```clang-format
|
||||
BasedOnStyle: LLVM
|
||||
UseTab: Never
|
||||
IndentWidth: 4
|
||||
TabWidth: 4
|
||||
|
||||
# 最外层大括号换行
|
||||
# BreakBeforeBraces: Linux
|
||||
|
||||
BreakBeforeBraces: Allman
|
||||
AllowShortIfStatementsOnASingleLine: true
|
||||
IndentCaseLabels: false
|
||||
ColumnLimit: 120
|
||||
```
|
||||
|
||||
## 2. 使用 VSCode+Clangd 开发 Linux 内核
|
||||
|
||||
如果直接使用 VSCode+Clangd 阅读内核代码的话,会存在一个问题:很难确定哪些 Linux 内核源码源码文件被编译使用了,哪些没有。此时使用 Bear 工具配合使用就可以很好的解决这个问题。Bear 是 Build EAR 的缩写,[官方](https://github.com/rizsotto/Bear)介绍如下:
|
||||
|
||||
```md
|
||||
Bear is a tool that generates a compilation database for clang tooling.
|
||||
|
||||
The JSON compilation database is used in the clang project to provide information on how a single compilation unit is processed. With this, it is easy to re-run the compilation with alternate programs.
|
||||
|
||||
Some build system natively supports the generation of JSON compilation database. For projects which does not use such build tool, Bear generates the JSON file during the build process.
|
||||
```
|
||||
|
||||
在 Ubuntu 下可以直接 Apt 安装
|
||||
|
||||
```bash
|
||||
sudo apt install bear
|
||||
```
|
||||
|
||||
Bear 的使用方式就是在原来的编译命令前加上 bear 命令即可,比如原来的编译命令为:
|
||||
|
||||
```bash
|
||||
make mrproper
|
||||
make defconfig
|
||||
make zImage -j4
|
||||
```
|
||||
|
||||
在使用 Bear 时只要将命令改为:
|
||||
|
||||
```bash
|
||||
make mrproper
|
||||
make defconfig
|
||||
bear make zImage -j4
|
||||
```
|
||||
|
||||
在编译完成后 Bear 将生成 compile_commands.json 文件。这个文件记录了工程是如何构建的,使用到了哪些源码文件,源码文件之间的包含关系,引用路径之类的。compile_commands.json 可以帮助 Clangd 构建符号关系索引库。
|
||||
|
||||
如果是交叉编译,需要将 compile_commands.json 中的“cc”全部替换为实际使用的交叉编译器,比如“arm-linux-gnueabihf-gcc”,然后保存。
|
||||
|
||||
如果项目下有 .cache 文件夹的话,需要删掉它。之后重新用 VSCode 打开源码目录,随便打开一个 .c 文件,Clangd 便自动开始索引文件了,索引文件会保存在 .cache 目录下。
|
||||
|
||||
由于内核源码较大,Clangd 将用几分钟的时间来建立索引。如果这个过程比较快,则说明配置没有生效。
|
||||
|
||||
如果一切顺利,就可以保存 VSCode 工程,以便下次使用。
|
||||
|
||||
## 3. 外部参考资料
|
||||
|
||||
1. [VSCode 使用 Clangd](https://blog.csdn.net/m0_47329175/article/details/128677511)
|
||||
2. [解决 clangd 设置 query-driver 后无法解析 include 路径](https://zhuanlan.zhihu.com/p/616838477)
|
||||
3. [VSCode 使用 clangd 构建 Linux 驱动开发环境](https://blog.csdn.net/Telly_/article/details/134289358)
|
||||
4. [使用 VSCode clangd 插件进行 linux 内核代码阅读和嵌入式开发](https://blog.csdn.net/m0_61738650/article/details/131529082)
|
||||
|
|
Loading…
Reference in New Issue