【问题标题】:Is there "includePath" option in clangd?clangd 中是否有“includePath”选项?
【发布时间】:2020-04-14 11:32:32
【问题描述】:

我曾经使用 VSCode C/C++ 扩展。这个扩展中有一个特性(在一个 json 文件中),称为“includePath”,我可以为我的头文件设置路径,所以在不执行 CMake 或 make 的情况下,我会得到我的头文件和代码完成的建议.

现在我已经切换到 neovim 和 clangd 作为代码完成的语言服务器。我搜索了很多以在clangd选项中找到相应的功能,但我找不到比this link更多的东西。

由于clangd是一个强大的语言服务器,我想知道它是否没有这样的功能。所以我想知道clangd中真的有这样的功能吗?如果是,我该如何使用它?

注意:我使用一个语言客户端,称为"coc-clangd"。我不知道这是否重要。

【问题讨论】:

  • 您需要提供compiler_commands.json,见:clangd.llvm.org/installation.html
  • 我知道。但我使用 catkin_make(ROS 平台) 自动生成 CMake 文件,然后基于它生成 compile_commands.json。所以如果我想自动化这个过程,我不能用这个文件来做这件事。

标签: c++ c neovim clangd


【解决方案1】:

也许这很有用:https://clangd.llvm.org/config

在源目录的顶层创建一个名为“.clangd”的文件。 添加这些内容。

CompileFlags: # Tweak the parse settings
  Add: 
    - "-I=[folder]"

但我认为不建议这样做,所有包含目录都应该添加到CMakeLists.txt文件中。

【讨论】:

  • 注意:如果您在 Visual Studio Code 中使用 clangd,则必须在 VS Code 设置中将 --enable-config 添加到 Clangd: Arguments 才能使用 .clangd 文件 source。我还发现"-I=path/to/dir" 不起作用,但"--include-directory=path/to/dir" 起作用了。
【解决方案2】:

Clangd 使用compile_commands.json 数据库文件,其中包含项目中每个文件的标志(例如包含目录)。但是这个文件是自动生成的,所以对它的所有修改最终都会被覆盖。您可以要求 CMake 使用 -DCMAKE_CXX_FLAGS 命令行参数添加任何自定义编译标志。

系统标头示例 (#include <file.h>):

cmake -DCMAKE_CXX_FLAGS="-isystem /path/to/includes" /path/to/source

对于项目标头 (#include "file.h"):

cmake -DCMAKE_CXX_FLAGS=-Ipath/to/includes /path/to/source

另外还可以设置CXXFLAGS环境变量:

export CXXFLAGS="-isystem /path/to/includes"
cmake path/to/sources

之后,新标志应出现在您的 compile_commands.json 文件中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-13
    • 1970-01-01
    • 1970-01-01
    • 2013-11-12
    • 2013-09-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多