5

免责声明:我完全了解 VS Code,所以请对我温柔一点。:-)

我正在尝试为C++设置VS Code。 但是,我明确希望对其进行设置,以便在处理 C++ 文件时使用语言服务器协议进行通信。
clangd

我已经clangd在我的(Ubuntu Linux)系统上安装了来自 VS Code 市场的官方 “vscode-clangd”扩展,我还调整了它的设置,以便它clangd可以找到。

然而,现在我迷路了。
当我打开一个文件*.cpp*.hpp文件时,VS Code 会向我推荐一些其他扩展(例如,支持 IntelliSense 的官方 Microsoft “C/C++”扩展),但我根本看不到在哪里以及如何clangd帮助我。

使用 Microsoft 的“C/C++”扩展似乎开箱即用,但我该如何使用clangd

谢谢你的帮助。

4

2 回答 2

19

我可以分享我的一些配置。

Microsoft "C/C++" 扩展非常适合调试,我认为您应该安装它。

同时,Clangd 在查找引用方面提供了更准确的结果。因此,我的建议是保留官方 C/C++ 扩展以进行调试,但禁用其 IntelliSense。将以下几行放入您的 settings.json

    "C_Cpp.intelliSenseEngine": "Disabled",
    "C_Cpp.autocomplete": "Disabled",  // So you don't get autocomplete from both extensions.
    "C_Cpp.errorSquiggles": "Disabled", // So you don't get error squiggles from both extensions (clangd's seem to be more reliable anyway).
    
    "clangd.path": "/path/to/your/clangd",
    "clangd.arguments": ["-log=verbose", "-pretty", "--background-index", "--compile-commands-dir=/path/to/your/compile_commands_dir/"]

正确配置后,您将在问题和终端旁边的 OUTPUT 窗口中看到 clangd 的输出。

在此处输入图像描述

于 2020-01-20T09:17:05.220 回答
3

它应该在没有任何配置的情况下工作。我已经在 Windows 上进行了测试,它工作得很好——我没有在 Visual Studio Code 中安装 C/C++ 扩展,只是vscode-clangd它报告错误,提供代码完成等。这意味着扩展工作,因为在 Visual Studio Code 中没有这样的功能“核心”Visual Studio 代码。Visual Studio Code 仍然建议流行的 C/C++ 扩展,但你可以忽略它,这并不意味着它vscode-clangd不起作用。

请注意,您正在编辑的文件必须具有标准扩展名,例如.cpp.c才能被vscode-clangd. 有关所有支持的扩展的列表,请参阅扩展的源代码

对于简单的项目,没有配置可能就足够了,但对于更复杂的项目,您当然需要让 Clang 知道诸如包含目录、编译标志等的信息。这可以通过创建一个compile_flags.txt文件来完成,您可以在其中为 Clang 键入参数, 每行一个。您可以将此文件放入与源文件相同的文件夹或树上的任何位置。编辑此文件后,您必须重新启动 Visual Studio Code,以使更改生效。

或者,您可以创建(或让 CMake 生成)一个compile_commands.json文件。它具有以下语法:

[
  { "directory": "/home/user/llvm/build",
    "command": "/usr/bin/clang++ -Irelative -DSOMEDEF=\"With spaces, quotes and \\-es.\" -c -o file.o file.cc",
    "file": "file.cc" },
  ...
]

有关更多详细信息,请参阅Clang 文档

于 2018-09-07T09:26:04.930 回答