duanjianbo3330
clangd 是 llvm clang-tools-extra 一系列工具集中的一个工具,原则上这个工具只能在 能被clang编译 的项目中工作,由于 clang 能够兼容 gcc 的编译选项,因此除 chang、gcc 之外的其他类型的编译器:armcc, iararm, keilc51, sdcc 这些编译器均是不受支持的,clangd 很可能在解析 compile_commands.json 时已经发生了错误,这是不可避免的(因为每个编译器可能存在一些独特的编译参数),你可以检查clangd的日志来确认这点。
早些时间我已经尝试过了,你可能会需要在 .clangd 中编写繁杂的 Add Remove 列表来试图解决编译参数不兼容、缺失包含路径的问题,但最终会不断有新的问题或错误出现。根本原因是你的项目无法被 clang 编译,因此你不能使用 clangd.
clangd/vscode-clangd#624 (comment)
clangd/vscode-clangd#836
在编译一些 linux 程序时,我会用到 clangd 这个工具,假设你使用 gcc, 那么只需 compile_commands.json 就够了,根本不需要编写 Add Remove 这样的额外的配置,因为 compile_commands.json 中已经包含了所有东西,一切都可以正常工作。
但是假如你想要使用 clangd 在使用 armcc、sdcc 的项目上工作,它始终是存在各种问题的。