环境:
在VS code / VS code server中配置以下插件:
从clangd的github(https://github.com/clangd/clangd/releases)下载最新的clangd工具:
然后将其解压到/home/xxx目录下:
unzip clangd-linux-15.0.3.zip
根据下图的步骤打开json文件,我这里演示的是远程服务器端的配置,如果你本身是linux环境,则需要先点击【用户】,再按第四步来。
打开setting.json文件后,填入以下内容:
这里的"Disabled"
{
"C_Cpp.default.intelliSenseMode": "linux-gcc-arm64",
"C_Cpp.intelliSenseEngine": "Disabled",
"clangd.path": "/home/xxxx/clangd_15.0.3/bin/clangd",
"clangd.arguments": [
"--log=verbose",
],
}
C/C++插件里的intellisense和clangd是冲突的,如果我们没有手工设置setting.json,当使用vscode打开C文件时时会提示禁止intellisense,不要点击!!!!!因此点击了会有Bug,其中的"Disabled"会被改成"disabled"。
在vscode中使用clangd,要实现精确跳转,需要使用bear分析源码生成compile_commands.json。
执行如下命令安装:
sudo apt instll bear
由于我们使用的是Yocto导出的Toolchain,在激活工具链后需要先使用unset LDFLAGS
,然后使用以下命令:
bear -l /usr/lib/x86_64-linux-gnu/bear/libear.so make -j12
!!!!!!!!!For ubuntu22.04!!!!!!!!!
bear --library /usr/lib/x86_64-linux-gnu/bear/libexec.so -- make -j8
由于此时我们使用的是Yocto SDK,里面不包含bear的库,因为我们需要手动指定库的位置。
编译完会生成compile_commands.json。
在索引源码之前,还需要再Linux文件夹中新建.clangd文件,并填入以下内容:
CompileFlags:
Remove:
[
-mabi=lp64,
]
clangd索引失败的原因大部分都是CompileFlags的问题,你可以在索引失败的clangd日志中查看出错的原因,并添加需要移除的CompileFlags。
现在用VS code打开Linux文件夹,打开任意c文件触发索引,你会看到下面的索引进度:
这里以main.c进行测试,找到start_kernel函数:
Ctrl+鼠标点击setup_arch函数,可以看到能够正确跳转到arm64架构下的setup_arch函数。