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 结果 的相关文章

  • c和java语言中的换行符

    现在行分隔符取决于系统 但在 C 程序中我使用 n 作为行分隔符 无论我在 Windows 还是 Linux 中运行它都可以正常工作 为什么 在java中 我们必须使用 n 因为它与系统相关 那么为什么我们在c中使用 n 作为新行 而不管我
  • 使用 Unity 在构造函数中使用属性依赖注入

    好的 我在基类中定义了一个依赖属性 我尝试在其派生类的构造函数内部使用它 但这不起作用 该属性显示为 null Unity 在使用 container Resolve 解析实例后解析依赖属性 我的另一种选择是将 IUnityContaine
  • C++ 中本地类中的静态成员变量?

    我知道我们不能宣布static本地类中的成员变量 但其原因尚不清楚 那么请问有人可以解释一下吗 另外 为什么我们不能访问非static函数内部定义的变量 内部已经定义了局部类 直接在局部类成员函数中 在下面给出的代码中 int main i
  • 如何将 #ifdef DEBUG 添加到 Xcode?

    我的项目中有一些代码永远不应该在发布版本中使用 但在测试时很有用 我想做这样的事情 ifdef DEBUG Run my debugging only code endif 在 Xcode 4 中哪里添加 DEBUG 设置 我尝试将其放入
  • 读取文件特定行号的有效方法。 (奖励:Python 手册印刷错误)

    我有一个 100 GB 的文本文件 它是来自数据库的 BCP 转储 当我尝试导入它时BULK INSERT 我在第 219506324 行上收到一个神秘错误 在解决此问题之前 我想看看这一行 但可惜的是我最喜欢的方法 import line
  • 如何访问另一个窗体上的ListView控件

    当单击与 ListView 所在表单不同的表单中的按钮时 我试图填充 ListView 我在 Form1 中创建了一个方法以在 Form2 中使用 并将参数传递给 Form1 中的方法 然后填充 ListView 当我调试时 我得到了传递的
  • 将 System.Windows.Input.KeyEventArgs 键转换为 char

    我需要将事件参数作为char 但是当我尝试转换 Key 枚举时 我得到的字母和符号与传入的字母和符号完全不同 如何正确地将密钥转换为字符 这是我尝试过的 ObserveKeyStroke this new ObervableKeyStrok
  • C# Dns.GetHostEntry 不返回连接到 WiFi 的移动设备的名称

    我有一个 C 中的 Windows 窗体应用程序 我试图获取列表中所有客户端的主机名 下面给出的是 ra00l 来自此链接的代码示例 GetHostEntry 非常慢 https stackoverflow com questions 99
  • 无法在 Windows 运行时组件库的 UserControl 中创建依赖项属性

    我想在用户控件内创建数据可绑定属性 这个用户控件包含一个 Windows 运行时组件 项目 我使用下面的代码来创建属性 public MyItem CurrentItem get return MyItem GetValue Current
  • 如何在 Linq 中获得左外连接?

    我的数据库中有两个表 如下所示 顾客 C ID city 1 Dhaka 2 New york 3 London 个人信息 P ID C ID Field value 1 1 First Name Nasir 2 1 Last Name U
  • 单击 form2 上的按钮触发 form 1 中的方法

    我对 Windows 窗体很陌生 我想知道是否可以通过单击表单 2 中的按钮来触发表单 1 中的方法 我的表格 1 有一个组合框 我的 Form 2 有一个 保存 按钮 我想要实现的是 当用户单击表单 2 中的 保存 时 我需要检查表单 1
  • 批量更新 SQL Server C#

    我有一个 270k 行的数据库 带有主键mid和一个名为value 我有一个包含中值和值的文本文件 现在我想更新表格 以便将每个值分配给正确的中间值 我当前的方法是从 C 读取文本文件 并为我读取的每一行更新表中的一行 必须有更快的方法来做
  • 上下文敏感与歧义

    我对上下文敏感性和歧义如何相互影响感到困惑 我认为正确的是 歧义 歧义语法会导致使用左推导或右推导构建多个解析树 所有可能的语法都是二义性的语言是二义性语言 例如 C 是一种不明确的语言 因为 x y 总是可以表示两个不同的事物 如下所述
  • 如何使用 Mongodb C# 驱动程序连接多个集合

    我需要将 3 个集合与多个集合合并在一起 lookup我在 C 驱动程序中尝试过 它允许我 lookup用户采集但无法执行秒 lookup用于设置集合 有人可以帮忙吗 db Transactions aggregate lookup fro
  • 如何编写一个同时需要请求和响应Dtos的ServiceStack插件

    我需要提供本地化数据服务 所有本地化的响应 Dto 都共享相同的属性 IE 我定义了一个接口 ILocalizedDto 来标记那些 Dto 在请求端 有一个ILocalizedRequest对于需要本地化的请求 Using IPlugin
  • gcc 的配置选项如何确定默认枚举大小(短或非短)?

    我尝试了一些 gcc 编译器来查看默认枚举大小是否很短 至少一个字节 强制使用 fshort enums 或无短 至少 4 个字节 强制使用 fno short enums user host echo Static assert 4 si
  • Server.MapPath - 给定的物理路径,预期的虚拟路径

    我正在使用这行代码 var files Directory GetFiles Server MapPath E ftproot sales 在文件夹中查找文件 但是我收到错误消息说 给定物理路径但虚拟路径 预期的 我对在 C 中使用 Sys
  • 检查Windows控制台中是否按下了键[重复]

    这个问题在这里已经有答案了 可能的重复 C 控制台键盘事件 https stackoverflow com questions 2067893 c console keyboard events 我希望 Windows 控制台程序在按下某个
  • 防止在工厂方法之外实例化对象

    假设我有一个带有工厂方法的类 class A public static A newA Some code logging return new A 是否可以使用 a 来阻止此类对象的实例化new 那么工厂方法是创建对象实例的唯一方法吗 当
  • 如何正确使用 std::condition_variable?

    我很困惑conditions variables以及如何 安全 使用它们 在我的应用程序中 我有一个创建 gui 线程的类 但是当 gui 是由 gui 线程构造时 主线程需要等待 情况与下面的函数相同 主线程创建互斥体 锁和conditi

随机推荐