Visual Studio代码:如何配置includePath以获得更好的IntelliSense结果

Nik*_* P. 9 c++ visual-studio-code

我是使用Visual Studio Code的完全初学者,我不知道我在做什么.我一直在搜索(也许还不够),但我无法找到像我这样的人的一个简单的解释,关于如何配置c_cpp_properties.json我被重定向到的文件,每当我点击一个带有下划线的行旁边的黄色灯泡时绿色的波浪形.

灯泡的例子

c_cpp_properties.json

我只是想知道如何.json使IntelliSense正常工作

Sus*_*ary 11

来自 C/C++ 扩展的官方文档:

配置 includePath 以获得更好的 IntelliSense 结果

如果在 Visual Studio Code 中打开文件夹时看到以下消息,则意味着 C++ IntelliSense 引擎需要有关包含文件所在路径的其他信息。

配置 includePath 以获得更好的 IntelliSense

包含路径在哪里定义?

包含路径在"includePath"名为c_cpp_properties.json的文件的设置中定义,该文件位于打开的文件夹中的 .vscode 目录中。

您可以使用"C/Cpp: Edit Configurations"命令面板中的命令或"Edit "includePath" setting"在灯泡菜单中选择来创建或打开此文件(请参见下面的屏幕截图)。找到灯泡的最快方法是滚动到源文件的顶部,然后单击 #include 语句下显示的任何绿色波浪线。

灯泡菜单“编辑“includePath”设置”

打开文件夹时,扩展程序会尝试根据您的操作系统定位您的系统标头,但它不知道您的项目所依赖的任何其他库。您可以将鼠标悬停在绿色波浪线上或打开“问题”窗口,以了解 IntelliSense 引擎无法打开哪些标头 - 有时是无法找到相关标头。

包括错误信息

如何指定包含路径?

您可以使用下述技术之一指定剩余路径。

  1. 使用 compile_commands.json 文件提供 includePaths 和定义信息

    该扩展可以得到的信息"includePath",并"defines"从compile_commands.json文件,它可以自动生成许多构建系统,如CMake和忍者。查找定义当前配置的部分(默认情况下,每个操作系统有一个配置,例如“Win32 或”Mac”),并将c_cpp_properties.json 中"compileCommands"属性设置为compile_commands.json 文件的完整路径和扩展将使用它而不是IntelliSense的和属性。"includes""defines"

    使用 compileCommands 设置

  2. 使用灯泡建议自动解析 includePath

    首先要尝试的是利用灯泡路径建议来自动解析包含路径。当您打开文件夹时,扩展程序将根据c_cpp_properties.json 中的设置设置的路径递归搜索与您的代码正在使用的头文件匹配的潜在包含路径。单击#include 语句下的绿色波浪线,您将看到一个灯泡,提供允许 IntelliSense 解析包含文件的路径建议。"browse.path"

    灯泡建议

    如果您在灯泡中没有看到路径建议,请尝试将标头可能位于的根文件夹添加到c_cpp_properties.json"browse.path"设置中。这允许扩展程序在这些文件夹中递归搜索,并随着搜索过程的进行在灯泡中提供更多建议。

  3. 手动添加包含路径

    如果以上都不能完全解析路径,您可以在c_cpp_properties.json文件中手动指定项目所依赖的头文件的路径。查找定义您当前配置的部分(默认情况下每个操作系统有一个配置,例如“Win32 或”Mac”),并在"includePath"设置中添加您的路径并在设置中定义"defines"。例如,以下屏幕截图显示了指定 Mac 配置路径的文件片段。

    此外,对于 MinGW,正如扩展的文档所解释的那样,您可以要求gcc/g++列出它自己的包含文件:

    gcc -v -E -x c++ nul
    
    Run Code Online (Sandbox Code Playgroud)

    c_cpp_properties 文件片段

验证包含路径是否正确解析

有两种方法可以验证包含路径是否正确解析:

  1. 源文件中的绿色波浪线不再显示
  2. 在问题窗口中清除错误消息

这表明 IntelliSense 引擎已解析包含路径,因此您可以开始享受当前翻译单元的 C 或 C++ 代码的完整 IntelliSense。请注意,如果其他文件属于需要配置其他包含路径的不同翻译单元,您可能仍会在其他文件上看到错误。

如果这不能解决您的问题,请查看下面的 MinGW 配置,并尝试为相应/类似的头文件和文件夹设置 Cygwin 安装的适当位置。

配置 MinGW

c_cpp_properties.json 参考指南

  • 你只是复制/粘贴官方文档,不是吗? (10认同)
  • 你没看到我回答的第一个文本吗? (3认同)
  • @ShihabShahriar 严格来说,源代码库在 MIT 许可下,所以文档可能也是如此,这可能意味着这个答案也在 MIT 许可下。 (3认同)
  • 你所有的图片网址都被破坏了 (3认同)
  • 我本人一直在为 VSCode 的这个 C/C++ 扩展的开发做出贡献,因此,我认为我应该拥有至少复制、编辑和发布部分文档的权利,供可能需要它但不需要它的人使用对此有所了解。另外,我最后还链接了原始来源。 (2认同)
  • 将“https://github.com/Microsoft/vscode-cpptools/raw/ronglu-edit/Images/”全部替换为“https://raw.githubusercontent.com/microsoft/vscode-cpptools/03c6c4df1d1c39a8b2a5522a8df96effeb3c2196/Images/”你的图片链接。始终指向特定的提交。 (2认同)

小智 5

来自Visual Studio Code 的 C/C++(预览版)

下面您可以看到 MinGW C++ 包含路径已添加到 Windows 的 browser.path 中:

{
"name": "Win32",
"includePath": [
    "${workspaceRoot}"
],
"defines": [
    "_DEBUG",
    "UNICODE"
],
"intelliSenseMode": "msvc-x64",
"browse": {
    "path": [
        "${workspaceRoot}",
        "C:\\MinGW\\lib\\gcc\\mingw32\\6.3.0\\include\\c++"
    ],
    "limitSymbolsToIncludedHeaders": true,
    "databaseFilename": ""
    }
}
Run Code Online (Sandbox Code Playgroud)