建设视频网站设计意义,网站服务器哪里的好,导航类主题wordpress,宁波建网站找哪家基于Clangd索引Linux内核源代码#xff0c;提供跳转和补全
适用于Neovim、Vim、VSCode等支持LSP的编辑器。
1 操作示例
1.1 操作环境
操作系统#xff1a;Ubuntu 20.04 in wsl2 编辑器#xff1a;VSCode LSP#xff1a;Clangd 内核版本#xff1a;longterm 5.15.145
…基于Clangd索引Linux内核源代码提供跳转和补全
适用于Neovim、Vim、VSCode等支持LSP的编辑器。
1 操作示例
1.1 操作环境
操作系统Ubuntu 20.04 in wsl2 编辑器VSCode LSPClangd 内核版本longterm 5.15.145
1.2 准备工作
由于gcc和clang并非完全兼容使用gcc编译后生成的compile_commands.json中可能包含clangd无法识别的Unknown argument导致clangd索引出现报错。故采用clang作为编译器。
由于编译该版本的Linux内核需要clang的最小版本为10.0.1默认从仓库中安装的版本为10.0.0不满足最小版本需求。因此需要执行如下命令安装更新版本的clang-12和clangd-12。
$ sudo apt install clang-12 clangd-12注意 clang和clangd的版本需要对应。否则最后代码提示可能也会报Unknown argument错误。 1.3 编译Linux内核并生成compile_commands.json
从官网下载Linux内核源代码使用命令$ tar xvf linux-5.15.145.tar.xz解压源代码进入解压后的源代码目录。配置编译$ make CCclang-12 defconfig # 由于默认的clang链接到了clang-10不满足版本要求故此处需要指定clang-12执行编译$ make CCclang-12 -j16生成compile_commands.json$ python ./scripts/clang-tools/gen_compile_commands.py1.4 编辑VSCode配置
用VSCode打开Linux内核源码文件夹安装clangd插件禁用C/C插件的代码提示在Workspace的settings.json中添加如下代码C_Cpp.intelliSenseEngine: disabled,设置clangd的路径。默认clangd的路径设置为clangd表明VSCode会直接从环境变量中寻找可执行文件clangd。但由于默认的clangd链接到了clangd-10我们编译内核使用的是clang-12需要与其版本对应的clangd-12提供代码提示。因此这里需要根据你使用的clang版本设置与其对应的clangd可执行文件路径。由于笔者使用了clang-12故需要在此使用clangd-12。在Workspace的settings.json中添加如下代码clangd.path: clangd-12,重启VSCode加载插件和配置发现能够正常完成源码索引且没有报错。
2 常见问题
Unknown argument: -fno-stack-clash-protection
Unknown warning option -Wno-frame-address; did you mean -Wno-address?
Unknown warning option -Wno-pointer-to-enum-cast; did you mean -Wno-pointer-compare?
Unknown warning option -Wno-frame-address; did you mean -Wno-address?
Unknown warning option -Wno-pointer-to-enum-cast; did you mean -Wno-pointer-compare?
......原因
使用gcc编译而gcc的某些编译选项clangd不支持。需要改用clang进行编译或者在项目文件夹的.clangd配置文件中禁用这些不支持的编译选项。参考clangd文档。使用clang编译但clang的版本和提供代码提示的clangd版本不对应不同版本间clangd支持的编译选项也有差异。需要在VSCode等编辑器配置文件中指定和clang版本对应的clangd路径。