标签: clangd

clangd 中有“includePath”选项吗?

我曾经使用 VSCode C/C++扩展。这个扩展中有一个功能(在 json 文件中),称为“includePath”,我可以设置标头的路径,因此无需执行 CMake 或 make,我就会从这些中获得标头和代码完成的建议。

现在我已经切换到 neovim 和 clangd 作为代码完成的语言服务器。我进行了大量搜索以在 clangd options 中找到相应的功能,但除了此链接之外我找不到任何其他内容。

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

注意:我使用一个名为“coc-clangd”的语言客户端。我不知道这是否重要。

c c++ neovim clangd

22
推荐指数
4
解决办法
4万
查看次数

VSCode + Clangd:类型注释变得唐突 - 如何禁用?

我正在使用 VSCode 1.65.0、clangd 扩展以及最新 LLVM (14.0) 中的 clangd。

它似乎引入了一项功能,每当我使用auto. 这是一个例子: clangd 类型提示

这对我来说变得非常唐突。如何关闭此功能?我找不到有关此功能的文档。

谢谢。

ide visual-studio-code language-server-protocol clangd

18
推荐指数
2
解决办法
1万
查看次数

有没有办法指定clangd的c++标准而不需要重新编译它?

我正在尝试使用 c++17(const lambdas) 中的一项功能,而不会出现 clangd 错误。我在网上搜索过,每个答案都告诉我用标志重新编译 clangd 。真的没有别的办法了吗?

编辑:Clangd 不是编译器。它是一个语言服务器,是一个与 IDE 一起使用的程序,它基本上在编译代码之前检查代码是否有错误和警告。请参阅https://clangd.llvm.org

c++ standards clangd

12
推荐指数
1
解决办法
8490
查看次数

clangd 无法识别标准标头

这个问题已被问过并回答过很多次,但似乎没有一个答案对我有用。

我一直在尝试clangd在 nvim lsp 中进行设置。我使用bear来生成compile_commands.json,但 clangd 仍然给我错误,告诉我它找不到标准库头。这是一个最小的例子:

主要.cpp:

#include <iostream>
using namespace std;

int main(){
  cout << "hello clangd";
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

然后我运行:bear -- g++ main.cpp,它编译并创建一个compile_commands.json包含以下内容的文件:

[
  {
    "arguments": [
      "/usr/bin/g++",
      "-c",
      "main.cpp"
    ],
    "directory": "/home/xxx/tmp/hello_clangd",
    "file": "/home/xxx/tmp/hello_clangd/main.cpp"
  }
]
Run Code Online (Sandbox Code Playgroud)

我还尝试使用 cmake 标志进行编译来生成compile_commands.json,但我遇到了同样的问题。我可以获取该文件,但语言服务器仍然无法正常工作。

我已经能够将 clang 与vim-pio 一起使用,所以看起来它没有损坏。我缺少什么。

编辑:顺便说一句,我在 ubuntu 上

c++ liskov-substitution-principle g++ neovim clangd

12
推荐指数
1
解决办法
6985
查看次数

我可以使用 GCC 编译器和 Clangd 语言服务器吗?

我正在开发一个使用 GCC 库 (SFML) 的项目,据我所知,该库不适用于 clang。我使用 COC 和 vim 来完成代码,但对于 C++,它需要 clangd。有没有办法使用 GCC 作为我的编译器,但仍然使用 clangd 语言服务器?

我还听说可能有一种方法可以让 clang 识别 GCC 库/标头,但我一直无法让它正常工作。如果有人能指出我正确的方向,那也会很有帮助。但我已经习惯了 GCC(自从我开始编程 C++ 以来就一直在使用它),所以能够使用 clangdGCC 会更好。

vim gcc clang clangd

9
推荐指数
1
解决办法
1万
查看次数

Clangd - 当没有 `compile_commands.json` 时如何设置要使用的默认标志?

这可能是不可能的,但我还是想问。我使用 Clangd 作为 VSCode 的自动完成引擎。它工作得很好,但有一个问题。

Clang 的官方 Windows 二进制文件依赖于 MSVC 标准库头。如果未安装 MSVC,Clang 和 Clangd 会抱怨缺少标头。

有一个标志使 Clang 使用 MinGW 的 libstdc++ ( --target=x86_64-w64-windows-gnu),我必须将其包含在compile_commands.json.

这个解决方案有效,但即使没有compile_commands.json.

有没有办法让 Clangd 假设--target=x86_64-w64-windows-gnu没有compile_commands.json

c++ clang clangd

8
推荐指数
1
解决办法
9203
查看次数

VSCode clangd 扩展找不到头文件

我目前的文件结构是:

??? common
?   ??? example.cc
??? compile_commands.json
??? include
    ??? common
        ??? example.hh
Run Code Online (Sandbox Code Playgroud)

example.hh: 留空

example.cc

??? common
?   ??? example.cc
??? compile_commands.json
??? include
    ??? common
        ??? example.hh
Run Code Online (Sandbox Code Playgroud)

compile_commands.json

#include "common/example.hh"

int main() {
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

打开example.cc它会产生错误:

'common/example.hh' file not found clang(pp_file_not_found)
Run Code Online (Sandbox Code Playgroud)

我直接运行命令,它工作正常:

[
    {
        "directory": "/home/user/project",
        "file": "/home/user/project/common/example.cc",
        "arguments": [
            "/usr/bin/clang++",
            "-I /home/user/project/include",
            "-o example",
            "/home/user/project/common/example.cc"
        ],
        "output": "example"
    }
]
Run Code Online (Sandbox Code Playgroud)

环境信息:

$ clang++ --version
clang version 10.0.0-4ubuntu1 
Target: x86_64-pc-linux-gnu
Thread …
Run Code Online (Sandbox Code Playgroud)

clang clang++ visual-studio-code clangd

7
推荐指数
1
解决办法
916
查看次数

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

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


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

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

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

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


请随意编辑问题。

更多信息:

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

config clang neovim clangd coc.nvim

7
推荐指数
1
解决办法
1万
查看次数

Vim 警告:看起来您已经在 coc-settings.json 中配置了 clangd,您应该将其删除以使用 coc-clangd

我最近开始在 Vim 上编写代码,虽然这并不容易,但这是值得的。我正在努力弄清楚在 KDevelop 或 VSCode 等 IDE 中理所当然的基本事情,尤其是在通过查找引用、自动完成等来浏览代码时。

对我来说幸运的是我找到了 CoC(-clangd 等)。但我收到一个我无法完全理解和调试的错误:

[coc.nvim] Looks like you've configured clangd in coc-settings.json, you should
 remove it to use coc-clangd
Run Code Online (Sandbox Code Playgroud)

当然,我在这个文件中配置了 clangd,正是因为 coc-clangd 插件希望我喜欢这个。

我的coc-settings.json

  {
          "languageserver":
          {
                  "clangd":
                  {
                          "command": "clangd",
                          "rootPatterns": ["compile_flags.txt",
                                          "compile_commands.json"],
                          "filetypes":["c",
                                          "cc",
                                          "cpp",
                                          "c++",
                                          "objc",
                                          "objcpp"]
                  },
                  "cmake":
                  {
                          "command": "cmake-language-server",
                          "filetypes": ["cmake"],
                          "rootPatterns": ["build/"],
                          "initializationOptions":
                          { 
                                  "buildDirectory": "build"
                          }
                  }
          }
          
  }
Run Code Online (Sandbox Code Playgroud)

自动完成(例如 printf)正常工作。那么这个警告是关于什么的呢?是我的配置错误还是我的设置中遗漏了某些内容?

提前致谢。

编辑:我曾经编辑内部“clangd”字符串,而它应该是这样的:

 {
          "languageserver":
          {
                  "coc-clangd": <-- This
                  {
                          "command": "clangd", …
Run Code Online (Sandbox Code Playgroud)

clangd coc.nvim

6
推荐指数
1
解决办法
1万
查看次数

让 clangd 了解编译器给出的宏

我有两个从同一源(客户端和服务器)构建的可执行文件,并且它们是使用-D CLIENT=0 -D SERVER=1服务器和-D CLIENT=1 -D SERVER=0客户端的编译选项构建的。如果我做类似的事情

if (CLIENT) {
// Client specific code
}
Run Code Online (Sandbox Code Playgroud)

clangd 抱怨 CLIENT 未定义。有没有办法让 clangd 知道这些宏?(代码编译得很好,错误来自clangd,而不是编译器)

c clangd

6
推荐指数
1
解决办法
2591
查看次数