Den*_*dir 4 c++ clang visual-studio-code language-server-protocol
免责声明:我完全了解 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
?
谢谢你的帮助。
小智 11
我可以分享我的一些配置。
Microsoft“C/C++”扩展非常适合调试,我认为您应该安装它。
同时,Clangd 在查找引用时提供了更准确的结果。所以,我的建议是保留官方的 C/C++ 调试扩展,但禁用它的智能感知。把下面几行放到你的 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/"]
Run Code Online (Sandbox Code Playgroud)
正确配置后,您将在问题和终端旁边的 OUTPUT 窗口中看到 clangd 的输出。
它应该无需任何配置即可工作。\n我已经在 Windows 上进行了测试,它工作得很好\xe2\x80\x94我没有在 Visual Studio Code 中安装 C/C++ 扩展,只是vscode-clangd
报告错误、提供代码完成等。\这意味着该扩展可以工作,因为“核心”Visual Studio Code 中没有此类功能。\nVisual Studio Code 仍然建议流行的 C/C++ 扩展,但您可以忽略它,这并不意味着不是这样的vscode-clangd
。工作。
请注意,您正在编辑的文件必须具有标准扩展名,例如.cpp
或.c
才能被 识别并执行操作vscode-clangd
。\n请参阅扩展名的源代码以获取所有支持的扩展名的列表。
对于简单的项目,没有配置可能就足够了,但对于更复杂的项目,您当然需要让 Clang 知道诸如包含目录、编译标志等的信息。\n这可以通过创建一个文件来完成,您可以在其中compile_flags.txt
键入参数Clang,每行一个。\n您可以将此文件放入与源文件相同的文件夹中或树上的任何位置。\n编辑此文件后,您必须重新启动 Visual Studio Code,以使更改生效。
或者,您可以创建(或让 CMake 生成)一个compile_commands.json
文件。\n它具有以下语法:
[\n { "directory": "/home/user/llvm/build",\n "command": "/usr/bin/clang++ -Irelative -DSOMEDEF=\\"With spaces, quotes and \\\\-es.\\" -c -o file.o file.cc",\n "file": "file.cc" },\n ...\n]\n
Run Code Online (Sandbox Code Playgroud)\n\n有关更多详细信息,请参阅Clang 文档。
\n请参阅VS Code Clangd 扩展的项目设置文档,其中指出:
\n\n\n你必须告诉 clangd 你的项目是如何构建的(编译标志)。compile_commands.json 文件通常可以由您的构建系统生成(例如使用 CMake,通过设置
\n-DCMAKE_EXPORT_COMPILE_COMMANDS=1
)。有关详细信息和替代方案,请参阅clangd 文档中的项目设置。
\n
在链接的 clangd 文档中,您将看到:
\n\n\n\n
compile_commands.json
\n此文件为项目中的每个源文件提供编译命令。它通常是由工具生成的。clangd 将在您编辑的文件的父目录中查找,也会在名为 的子目录中查找
\nbuild/
。例如,如果编辑,我们在, , , , \xe2\x80\xa6$SRC/gui/window.cpp
中搜索$SRC/gui/
$SRC/gui/build/
$SRC/
$SRC/build/
由于 CMake 在构建树的根目录中生成编译命令数据库,除非您正在进行源内构建,否则您可能需要
\nclangd.arguments
,您可以在其中传递--compile-commands-dir=...
另请参阅文档CMAKE_EXPORT_COMPILE_COMMANDS
(请注意,仅当您使用 Ninja 或 Makefile 生成器时,在撰写本文时才支持)。您可能需要将该副本的路径添加到您的 .gitignore。
如果您正在使用 CMake 工具扩展:文档说要使用-D...
,如果您自己通过命令行调用配置命令,则可以这样做。如果您通过 VS Code CMake 工具扩展执行此操作,则可以使用cmake.configureSettings
它提供的设置,或者编写CMake 配置预设并使用该cacheVariables
属性(因为 CMake 工具支持 CMake 预设)。
归档时间: |
|
查看次数: |
14319 次 |
最近记录: |