diff --git a/Software/Applications/VSCode/VSCode_使用_Clangd_插件.md b/Software/Applications/VSCode/VSCode_使用_Clangd_插件.md index 6d0caa1..432d7de 100644 --- a/Software/Applications/VSCode/VSCode_使用_Clangd_插件.md +++ b/Software/Applications/VSCode/VSCode_使用_Clangd_插件.md @@ -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)