如何配置 clangd 以查找丢失的外部头文件?

问题描述

我是 clang 工具的新手用户,我正在学习 c/c++。


我有一些基于使用其数据结构和构建系统 (OpenFOAM) 的框架的代码。我在主目录的文件夹中编译了框架的库。这个框架有一堆目录,这些目录将类的所有头文件作为符号链接保存在其中。我使用 neovimcoc 扩展作为客户端,使用 clangd 作为语言服务器。

问题是,在我的代码中,clangd 找到了一些头文件,而不是全部。这种行为的原因是什么?以及如何修复它或摆脱编辑器中的诊断。

我阅读了 clangd (clangd --help) 提供的帮助,结果发现有一个标志 --header-insertion=<string>,如果我将 <string> 设置为 iwyu(对于,Include你使用什么),我可以摆脱这样的警告。根据帮助,我可以通过config.yaml文件夹(Linux中的xdg系统)中的~/.config/clangd文件配置clangd。问题是,我如何编辑此文件以获得上述标志的效果。我只是将该标志放在文件中,但没有任何改变。基本上我想要的是,要么配置 clangd 以递归方式搜索目录中的头文件,要么如果不可能消除它找不到的丢失头文件的诊断警告。

我不知道的另一件事是,如何重新启动服务器以重新读取配置。我应该终止当前进程并重新运行它吗?


随意编辑问题。

更多信息:

  • 操作系统:artixlinux
  • NVIM:v0.5.0-dev+1225-gbbdd00203
  • CLANGD:v11.1.0

解决方法

可能的解决方案是: 将 -DCMAKE_EXPORT_COMPILE_COMMANDS=1 添加到 cmake 命令行 例如:cmake -D CMAKE_CXX_COMPILER=clang++ -DCMAKE_EXPORT_COMPILE_COMMANDS=1 .

然后,它会生成一个 compile_commands.json 文件,它可以被 clangd 自动读取。我看不到标题的更多警告

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...