Vscode、Clangd、RemoteSSH——环境配置

本文最后更新于 2024年6月7日 中午

使用场景:Windows 端 Vscode 使用 RemoteSSH 插件远程连接到 fedora 系统,并且项目源码是在 fedora 上。

1 安装 bear

sudo dnf install bear

2 安装 clang、clangd

sudo dnf install clang

sudo dnf install clang-tools-extra

3 配置 VScode Clangd 插件

需要先将 VScode 中的所有 C/C++ 插件禁用或卸载

在 VScode 的插件里面搜索 “Clangd” 并且安装。

安装完毕后,打开 VScode 设置:

我是在远程中设置的,打开远程的 settings. json 文件,配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
{
"clangd.path": "/usr/bin/clangd",
"clangd.arguments": [
"--background-index",
"--compile-commands-dir=/home/jw/develop/linux",
"-j=4",
"--query-driver=/usr/bin/aarch64-linux-gnu-gcc",
"--clang-tidy",
"--clang-tidy-checks=performance-*,bugprone-*",
"--all-scopes-completion",
"--completion-style=detailed",
"--header-insertion=iwyu",
"--pch-storage=disk",
"--compile-commands-dir=${workspaceFolder}",
"--background-index",
"--completion-style=detailed",
"--header-insertion=never"
],
"clangd.fallbackFlags": [
"-I/home/jw/develop/linux/include",
"-I/home/jw/develop/linux/arch/arm64/include",
"-I/home/jw/develop/linux/arch/arm64/include/generated/"
]
}
  • “clangd.path” 使用 which clangd 命令查看:
  • “clangd.arguments” 的 –compile-commands-dir 填你的项目源码根目录
  • “clangd.arguments” 的 –query-driver 填交叉编译器路径
  • “clangd.fallbackFlags” 中 /home/jw/develop/linux 替换成你的项目路径
  • “clangd.fallbackFlags” 中 arch/arm64/includearch/arm64/include/generated/ 使用 arm64 架构,根据自己的开发板架构来

4 编译项目生成 compile_commands.json 文件

重新编译 kernel 镜像,先 clean 项目再编译:

1
2
3
make distclean
make bcm2712_defconfig //根据你的开发板而定
bear -- make Image -j8 //Image、zImage还是uImage根据你的开发板而定

编译完后会在项目根目录下生成 compile_commands.json 文件:

将所有的 /usr/bin/gcc 替换成你的交叉编译器,我的是 /usr/bin/aarch64-linux-gnu-gcc VIM 中使用 :%s#/usr/bin/gcc#/usr/bin/aarch64-linux-gnu-gcc#g 命令替换。

4.1 创建 .clangd 文件

在项目根目录下创建 .clangd 文件,内容如下:

1
2
3
4
5
6
7
8
9
CompileFlags:
Add:
[-I, "/usr/include"]
Remove:
[
-fno-allow-store-data-races,
-fconserve-stack,
-mabi=lp64
]

其中的 Remove 是为了忽略 gcc 和 clang 编译器不兼容而出现的错误。

5 VScode 打开项目

使用 VScode 打开项目:

ok,此时就可以代码提示和补全了!

5.1 处理一些问题

如果配置后不起效,可以在 clangd 的 log 中查看哪里的问题:

具体的问题可以在网上搜索下。

参考文章:VSCode 使用 clangd 构建 Linux 驱动开发环境clangd: Couldn‘t build compiler instance


Vscode、Clangd、RemoteSSH——环境配置
https://jwlee36963.github.io/posts/af2bf757/
作者
jw
发布于
2024年5月24日
许可协议