如何在VS Code中为CMake项目设置C/C++智能感知?

jyztefdp  于 7个月前  发布在  C/C++
关注(0)|答案(5)|浏览(159)

我正在尝试使用libTooling编写一个工具。我对它进行了设置,以便它使用LLVM文档中的示例进行编译。然而,C/C智能感知似乎不适用于CMake项目。
我的工具位于:
<project>/clang-tools-extra/mytool
现在,C/C
扩展尝试读取compile_log.json,并告诉我找不到<project>/build/compile_config.json,而是使用c_cpp_properties.json中的includePath
我尝试在工作区设置中手动添加包含路径:

{
    "C_Cpp.default.includePath": [
        "../../",
        "../../clang/Frontend/",
        "../../clang/Tooling/",
        "../../llvm/Support/"
    ],
    "C_Cpp.default.browse.path": [
        "../.."
    ]
}

或者在文件c_cpp_properties.json中。但它仍然在错误的地方搜索包含项。例如,包括:

#include "llvm/Support/CommandLine.h"

它试图在<project>/llvm/include/llvm/Support/CommandLine.h中找到。所以很明显,它从command_js.json读取了一些东西,尽管它说它找不到它(当它在那里的时候),但是错误的东西。它根本不应该添加llvm/include

tkqqtvp1

tkqqtvp11#

对于VSCode 1.63+(2022或更高版本):

**1.**安装CMake Tools扩展(ms-vscode.cmake-tools)。
2.将此内容放入.vscode/c_cpp_properties.json

{
    "configurations": [
        {
            "name": "CMake",
            "compileCommands": "${config:cmake.buildDirectory}/compile_commands.json",
            "configurationProvider": "ms-vscode.cmake-tools"
        }
    ],
    "version": 4
}
2j4z5cfb

2j4z5cfb2#

1)将“compileCommands”指向“compile_commands.json”
2)您可能需要添加**,例如:../../**双星星使其递归
3)你可以使用一些变量,比如${workspaceRoot},而不是在包含路径中使用相对路径。

i1icjdpr

i1icjdpr3#

您需要安装cmake-tool扩展(ms-vscode.cmake-tools)并将以下配置添加到c_cpp_properties.json

{
    "configurations": [
        {
            "compileCommands": "${workspaceFolder}/_build/compile_commands.json",
            "configurationProvider": "ms-vscode.cmake-tools"
        }
    ],
    "version": 4
}

对我很有效

dly7yett

dly7yett4#

也许您只需要启用扩展cmake-tools,正确配置CMakeLists.txt,然后运行cmake。
通常,只要cmake没有错误,Intellisense就应该正常工作。

pzfprimi

pzfprimi5#

如果您使用的是CMake Tools扩展

您需要配置Cpptools扩展以使用CMake工具扩展作为配置提供程序。
如果你不需要定义多个Cpptools c_cpp configurations,我只需要在你的workspace .vscode/settings.json中添加以下代码:

"C_Cpp.default.configurationProvider": "ms-vscode.cmake-tools",

否则,您可以在.vscode/c_cpp_configurations.json中创建一个c_cpp配置,并在其中设置configurationProvider。例(将其放入configurations数组属性中)

{
    "name": "CMake Tools",
    "configurationProvider": "ms-vscode.cmake-tools"
}

您可能需要也可能不需要运行配置和构建以跟踪您的更改。我不太确定实现细节或历史上的细微差别。根据我的观察,问题检测是基于构建诊断的,因此您需要重新构建以“刷新”问题检测,例如编辑器中的错误曲线。
就是这样。如果你是那种喜欢阅读文档的人(疯狂,对吧?这样的人存在吗)...
可以在这里找到用于设置intellisense的CMake Tools文档。引用它:
CMake Tools目前支持Microsoft的ms-vscode.cpptools扩展。如果安装并启用了ms-vscode.cpptools扩展,则配置项目将自动提供此集成。
ms-vscode.cpptools将显示一个提示,确认您希望使用CMake Tools为您的项目提供配置信息。接受此提示以激活集成。随后,CMake Tools将为项目中的每个源文件提供并自动更新cpptools配置信息。
关于设置智能感知的Cpptools FAQ条目可以在这里找到。引用它:
或者,如果您安装了与我们的扩展接口的构建系统扩展,则可以允许该扩展为您提供配置。例如,CMake Tools扩展可以配置使用CMake构建系统的项目。使用C/C++: Change Configuration Provider...命令启用任何此类扩展以提供IntelliSense的配置。
configurationProvider设置的Cpptools文档可以在这里找到。引用它:
configurationProvider:可以为源文件提供智能感知配置信息的VS代码扩展的ID。例如,使用VS代码扩展ID ms-vscode.cmake-tools提供CMake Tools扩展的配置信息。如果您指定了configurationProvider,则提供的配置将优先于c_cpp_properties.json中的其他设置。
这里写的其他几个答案建议您还应该设置c_cpp配置的compileCommands属性。在我自己的经历中,我没有发现这是必要的。如果我理解正确的话,这只是另一种使用Cpptools扩展获取智能感知的方法。同样,引用Cpptools FAQ关于设置智能感知的条目:
对于没有构建系统扩展支持的项目,第三种选择是使用compile_commands.json文件,前提是您的构建系统支持生成此文件。在Configuration UI的“Advanced”部分,您可以提供compile_commands.json的路径,扩展将使用该文件中列出的编译信息来配置IntelliSense。
强调“*A第三个选项 *"。此外,CMake目前不支持为它支持的所有生成器创建编译命令数据库文件。请参阅CMAKE_EXPORT_COMPILE_COMMANDS的文档,其中指出:

**注意:**此选项仅由Makefile Generators和Ninja Generators实现。它在其他生成器上被忽略。

所以使用它并不是最容易移植的方法。

如果使用Clangd扩展

我已经在其他地方写过了:How can I make the VS Code clangd extension aware of the include paths defined in my CMake configuration? . TL; DR如果你不是在进行源代码内构建,你需要告诉clangd你的compile_commands.json文件在哪里。

相关问题