一、背景
在完成开发环境搭建后,vscode 自带的代码提示与跳转不太好用,经常报错或者跳不动。在开始大规模改代码前,有必要先使用 clangd 来优化一下。
二、效果
代码跳转非常快,能一直跳转到最底层的函数,方便阅读代码。
![]()![]()
代码提示也非常到位,可以快速完成功能搭建。
![]()
三、主要步骤
3.1 安装必要的软件。
3.1.1 安装 clangd
sudo apt install clangd
3.1.2 安装 compiledb
pip3 install compiledb
3.2 生成编译数据库
然后分析项目的编译过程,在合适的地方生成编译数据库
从执行 make 的目录,也就是 AiPi-Eyes-Rx
目录找到 Makefile
,发现最后包含了 SDK 路径的 project.build
![]()
继续查,会发现执行 make 后,会在 AiPi-Eyes-Rx/build
目录生成最终的 makefile,然后执行 make
![]()
转到 AiPi-Eyes-Rx/build
目录,执行命令生成编译数据库
compiledb -n make
可以看到在 build 目录生成了 compile_commands.json
文件,内容如下:
![]()
编译数据库指定了编译器、编译参数以及各个文件的路径,可以让 clangd 快速提示以及跳转。
3.3 生成 vscode 配置
在项目的根目录新建 .vscode/settings.json
文件,内容如下:
{
"clangd.arguments": [
"--compile-commands-dir=AiPi-Eyes-Rx/build",
"--all-scopes-completion",
"--background-index",
"--completion-style=detailed",
"--header-insertion=iwyu",
"--header-insertion-decorators",
"-j=8",
"--pch-storage=disk",
"--clang-tidy",
"--completion-parse=auto"
],
"clangd.path": "/usr/bin/clangd"
}
其中 clangd.path
根据自身情况做调整。
3.4 排除特定编译 flag
再在根目录新建 .clangd
配置文件,用于排除特定的 flag,否则 clangd 会报错:Failed to prepare a compiler instance: valid target CPU values are
CompileFlags:
Remove: ["-march=rv32imafcpzpsfoperand_xtheade", "-mabi=ilp32f", "-mtune=e907"]
注意是项目的根目录,不是 build 目录。
重新打开窗口后,就能看到 clangd 的代码提示了,跳转速度也很快,编程体验很好。