clangd-vscode配置

发布于:2025-05-01 ⋅ 阅读:(17) ⋅ 点赞:(0)

准备工作

  1. 内核源码linux-imx
  2. python3
  3. 下载scripts/clang-tools/gen_compile_commands.py
  4. vscode和clangd插件,把cpptool插件禁止。

gen_compile_commands.py: 通过*.cmd来生成compile_commands.json

文件compile_commands.json

如何生成

cmake生成

cmake支持compile_commands.json生成。
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON …
或者:set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

bear生成

apt install bear
bear -- make -j8

其他

也可以用其他方式来生成如内核可以用python程序:
scripts/clang-tools/gen_compile_commands.py

观察和理解

观察compile_commands.json中的command字段:其中包含-I/usr/include这样的编译选项,clangd能通过command字段来提取头文件。

  {
    "command": "/path/aarch64-poky-linux-gcc -Wl -mabi=lp64 --isystem rc-anysee.c",
    "directory": "/mnt/extdisk3/imx8_sdk/kernel/4.14.98/linux-imx",
    "file": "/mnt/extdisk3/imx8_sdk/kernel/4.14.98/linux-imx/drivers/media/rc/keymaps/rc-anysee.c"
  },

clangd常见错误以及应对方法

  1. –query-driver错误
    观察compile_commands.json中的command字段:其中包含-I/usr/include这样的编译选项,clangd能通过command命令来提取头文件。
    错误:System include extraction: driver clang not found in PATH
    
    解决:想办法让compile_commands.json中的command为 绝对路径。
    

Q: --query-driver什么时候可以不配置?
A: 只要保证compile_commands.json的command为绝对路径

.clangd配置文件

参考: .clangd配置文件简介
本人的理解:当compile_command.json

  1. 如果clangd不能识别gcc中的一些参数,可以进行配置
    如下错误: clangd无法识别gcc的参数lp64

E[14:05:24.926] Could not build a preamble for file /linux-imx/drivers/pci/dwc/pci-imx6.c version 1: CreateTargetInfo() return null
E[14:05:24.926]   error: unknown target ABI 'lp64'
E[14:05:24.927] Failed to prepare a compiler instance: unknown target ABI 'lp64'

错误原因:clangd无法识别的编译参数-mabi=lp64(gcc包含-mabi=lp64的参数)。

解决: 编辑.clangd删除,当然也可以Add参数

CompileFlags:
  Remove: [-mabi=lp64]

clangd实时错误输出

如果clangd配置有问题:当你的鼠标放在函数上,进行导航时,将会出现如下的错误, 这些错误是实时生成的

[Error - 2:34:45 PM] Request textDocument/definition failed.
[object Object]
[Error - 2:34:45 PM] Request textDocument/definition failed.
[object Object]
[Error - 2:34:45 PM] Request textDocument/hover failed.
[object Object]
[Error - 2:36:30 PM] Request textDocument/hover failed.
[object Object]
[Error - 2:36:30 PM] Request textDocument/definition failed.
[object Object]
[Error - 2:36:30 PM] Request textDocument/definition failed.
[object Object]
[Error - 2:36:30 PM] Request textDocument/hover failed.
[object Object]

clangd和vscode配合之下的bug

**前提:**所有的配置都正确,所有的函数和变量都能正确的导航。
Bug:函数跳转到另一个文件时,会出现下面错误。

[Error - 2:48:58 PM] Request textDocument/codeAction failed.
[object Object]
[Error - 2:48:58 PM] Request textDocument/documentHighlight failed.
[object Object]

网站公告

今日签到

点亮在社区的每一天
去签到