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

2024-05-15

我是使用 Visual Studio Code 的完全初学者,我不知道我在做什么。

我已经四处搜索(也许还不够),但我找不到像我这样的人如何配置的简单解释c_cpp_properties.json每当我单击带有绿色波浪线下划线的行旁边的黄色灯泡时,我都会重定向到该文件。

灯泡示例 https://i.stack.imgur.com/5gxQw.png

c_cpp_properties.json https://i.stack.imgur.com/OMlGq.png

我只是想知道要放入什么.json使 IntelliSense 正常工作。


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

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

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

包含路径在哪里定义?

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

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

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

如何指定包含路径?

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

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

    扩展程序可以获取以下信息"includePath" and "defines"来自compile_commands.json 文件,该文件可以由许多构建系统(例如CMake 和Ninja)自动生成。查找定义当前配置的部分(默认情况下,每个操作系统有一个配置,例如“Win32 或“Mac”),然后设置"compileCommands"财产在c_cpp_properties.json到您的compile_commands.json文件的完整路径,扩展将使用它而不是"includes" and "defines"IntelliSense 的属性。

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

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

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

  3. 手动添加包含路径

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

    另外,对于 MinGW,正如扩展的文档所解释的那样 https://github.com/Microsoft/vscode-cpptools/blob/master/Documentation/LanguageServer/MinGW.md你可能会问gcc/g++列出它自己的包含文件:

    gcc -v -E -x c++ nul
    

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

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

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

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

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

配置 MinGW https://github.com/Microsoft/vscode-cpptools/blob/master/Documentation/LanguageServer/MinGW.md

c_cpp_properties.json 参考指南 https://github.com/Microsoft/vscode-cpptools/blob/master/Documentation/LanguageServer/c_cpp_properties.json.md

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Visual Studio Code:如何配置 includePath 以获得更好的 IntelliSense 结果 的相关文章

  • 使用 std::packaged_task/std::exception_ptr 时,线程清理程序报告数据争用

    我遇到了线程清理程序 TSan 的一些问题 抱怨某些生产代码中的数据争用 其中 std packaged task 通过将它们包装在 std function 中而移交给调度程序线程 对于这个问题 我简化了它在生产中的作用 同时触发 TSa
  • 在 DataView 的 RowFilter 中选择 DISTINCT

    我试图根据与另一个表的关系缩小 DataView 中的行范围 我使用的 RowFilter 如下 dv new DataView myDS myTable id IN SELECT DISTINCT parentID FROM myOthe
  • 复制 std::function 的成本有多高?

    While std function是可移动的 但在某些情况下不可能或不方便 复制它会受到重大处罚吗 它是否可能取决于捕获变量的大小 如果它是使用 lambda 表达式创建的 它依赖于实现吗 std function通常被实现为值语义 小缓
  • java.io.Serialized 在 C/C++ 中的等价物是什么?

    C C 的等价物是什么java io Serialized https docs oracle com javase 7 docs api java io Serializable html 有对序列化库的引用 用 C 序列化数据结构 ht
  • 如何使用 LINQ2SQL 连接两个不同上下文的表?

    我的应用程序中有 2 个数据上下文 不同的数据库 并且需要能够通过上下文 B 中的表的右连接来查询上下文 A 中的表 我该如何在 LINQ2SQL 中执行此操作 Why 我们正在使用 SaaS 产品来跟踪我们的时间 项目等 并希望向该产品发
  • 在 C 中初始化变量

    我知道有时如果你不初始化int 如果打印整数 您将得到一个随机数 但将所有内容初始化为零似乎有点愚蠢 我问这个问题是因为我正在评论我的 C 项目 而且我对缩进非常直接 并且它可以完全编译 90 90 谢谢 Stackoverflow 但我想
  • 在 Visual Studio 2010 中从 Fortran 调用 C++ 函数

    我想从 Fortran 调用 C 函数 为此 我在 Visual Studio 2010 中创建了一个 FORTRAN 项目 之后 我将一个 Cpp 项目添加到该 FORTRAN 项目中 当我要构建程序时出现以下错误 Error 1 unr
  • 标准化 UTF-8 到底是什么?

    The 重症监护室项目 http userguide icu project org transforms normalization 现在也有一个PHP库 http us php net manual en class normalize
  • 我可以使用 moq Mock 来模拟类而不是接口吗?

    正在经历https github com Moq moq4 wiki Quickstart https github com Moq moq4 wiki Quickstart 我看到它 Mock 一个接口 我的遗留代码中有一个没有接口的类
  • 如何检测表单的任何控件的变化?

    如何检测 C 中表单的任何控件的更改 由于我在一个表单上有许多控件 并且如果表单中的任何控件值发生更改 我需要禁用按钮 我正在寻找一些内置函数 事件处理程序 属性 并且不想为此创建自定义函数 不 我不知道任何时候都会触发任何事件any控制表
  • 如何在 32 位或 64 位配置中以编程方式运行任何 CPU .NET 可执行文件?

    我有一个可在 32 位和 64 位处理器上运行的 C 应用程序 我试图枚举给定系统上所有进程的模块 当尝试从 64 位应用程序枚举 32 位进程模块时 这会出现问题 Windows 或 NET 禁止它 我认为如果我可以从应用程序内部重新启动
  • C# 中的合并运算符?

    我想我记得看到过类似的东西 三元运算符 http msdn microsoft com en us library ty67wk28 28VS 80 29 aspx在 C 中 它只有两部分 如果变量值不为空 则返回变量值 如果为空 则返回默
  • 为什么 std::strstream 被弃用?

    我最近发现std strstream已被弃用 取而代之的是std stringstream 我已经有一段时间没有使用它了 但它做了我当时需要做的事情 所以很惊讶听到它的弃用 我的问题是为什么做出这个决定 有什么好处std stringstr
  • AES 128 CBC 蒙特卡罗测试

    我正在 AES 128 CBC 上执行 MCT 如中所述http csrc nist gov groups STM cavp documents aes AESAVS pdf http csrc nist gov groups STM ca
  • 动态添加 ASP.Net 控件

    我有一个存储过程 它根据数据库中存储的记录数返回多行 现在我想有一种方法来创建 div 带有包含该行值的控件的标记 如果从数据库返回 10 行 则 10 div 必须创建标签 我有下面的代码来从数据库中获取结果 但我不知道如何从这里继续 S
  • Cmake 链接共享库:包含库中的头文件时“没有这样的文件或目录”

    我正在学习使用 CMake 构建库 构建库的代码结构如下 include Test hpp ITest hpp interface src Test cpp ITest cpp 在 CMakeLists txt 中 我用来构建库的句子是 f
  • 如何在非控制台应用程序中查看 cout 输出?

    输出到调试窗口似乎相当繁琐 我在哪里可以找到cout如果我正在编写非控制台信息 则输出 Like double i a b cout lt lt b lt lt endl I want to check out whether b is z
  • System.IO.FileNotFoundException:找不到网络路径。在 Windows 7 上使用 DirectoryEntry 对象时出现异常

    我正在尝试使用 DirectoryEntry 对象连接到远程 Windows 7 计算机 这是我的代码 DirectoryEntry obDirEntry new DirectoryEntry WinNT hostName hostName
  • C++ 条件编译

    我有以下代码片段 ifdef DO LOG define log p record p else define log p endif void record char data 现在如果我打电话log hello world 在我的代码中
  • 从列表中选择项目以求和

    我有一个包含数值的项目列表 我需要使用这些项目求和 我需要你的帮助来构建这样的算法 下面是一个用 C 编写的示例 描述了我的问题 int sum 21 List

随机推荐