【问题标题】:How to configure clangd to find missing external header file?如何配置 clangd 以查找丢失的外部头文件?
【发布时间】:2021-04-07 13:23:12
【问题描述】:

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


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

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

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

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


请随意编辑问题。

更多信息:

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

【问题讨论】:

  • 你解决了吗?
  • @Rainning 有点。与bearbear -- <build command>。它将创建一个隐藏的配置文件。 clangd 能够读取该文件。不幸的是bear没有检测到头文件,所以你必须在配置文件中手动添加它们。

标签: clang config neovim coc.nvim clangd


【解决方案1】:

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

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

【讨论】:

  • 你的项目结构是什么?我在 CMakeLists.txt 中设置了 cmake -S . -B out/buildCMAKE_EXPORT_COMPILE_COMMANDScompile_commands.json 是在out/build 生成的,但我的源文件放在src/ (这里srcout 处于同一级别)
猜你喜欢
  • 1970-01-01
  • 2022-07-11
  • 1970-01-01
  • 1970-01-01
  • 2011-02-21
  • 1970-01-01
  • 2013-01-22
  • 2021-01-31
  • 1970-01-01
相关资源
最近更新 更多