linux - vscode“检测到#include 错误。请更新您的 includePath

标签 linux arduino visual-studio-code include-path

我正在尝试将 vscode 与 arduino 一起使用,但没有成功。 问题似乎出在库路径上。 但我没能解决这个问题! 我在 Linux 上。

"message": "#include errors detected. Please update your includePath. IntelliSense features for this translation unit (/home/harold/Arduino/Saaf_Curing/Saaf_Curing.ino) will be provided by the Tag Parser.",

我不知道如何找到我的 includePath。 我无法执行 vscode 中给出的任何建议。

我想知道 vs code 是否是正确的方向,因为它看起来很复杂?

最佳答案

虽然问题提到了 Arduino,但只要 VSCode 告诉您“更新您的 includePath”,以下建议基本上适用。

什么是 includePath?

includePathc_cpp_settings.json中的一个属性,它在你在VSCode中打开的主文件夹的.vscode文件夹中使用文件 → 打开文件夹。

您可以直接编辑 c_cpp_settings.json,但使用“C/C++ 配置 GUI”通常更容易。为此,打开命令面板 (Ctrl+Shift+P) 并运行“C/C++:编辑配置 (UI)”。然后查找“包含路径”设置。

includePath 告诉 VSCode(特别是 C/C++ extension 的 IntelliSense 组件)在解析 #include "filename" 指令时要查看的位置。这允许 VSCode 查看这些文件中定义的符号的定义。

那么当 VSCode 告诉我时,我应该摆弄 includePath 吗?

一开始没有!在更改包含路径之前,如果您还没有更改,请先将“编译器路径”设置为指向您的 C/C++ 编译器,并设置“IntelliSense 模式”以尽可能匹配编译器。

您可能还需要调整编译器参数,特别是如果编译器能够为多个目标生成代码,例如 32 位和 64 位代码。 (如果你不知道那是什么意思,请先跳过。)

接下来,在命令面板中,运行“C/C++:日志诊断”。输出将向您显示 VSCode 发现了哪个编译器,以及它检测到的内容作为其内置包含路径和预处理器定义。

然后,在 shell 中运行这些命令:

  $ touch empty.c
  $ gcc -v -E -dD empty.c

在这里,我假设您使用 gcc 作为编译器。如果不是,请替换为实际的编译器命令名称。如果您的编译器不是 GCC 的变体(例如,您使用的是 Microsoft cl.exe 编译器),您需要查看其文档或通过 Google 查找打印预定义宏和包含路径的开关(例如,参见 here对于 cl.exe)。

将上述命令的输出与 VSCode 在其 C/C++ 诊断输出中显示的内容进行比较。希望他们非常相似。如果不是,请尝试调整编译器路径、IntelliSense 模式或编译器参数。通过仅调整这三个设置使它们尽可能接近后,继续下一步。

现在根据需要调整 includePath

如果编译器内置配置与 VSCode 检测到的配置之间仍然存在显着差异,请通过(在 C/C++ 设置 UI 中)修改包含路径、定义和 C/C++ 标准字段来解决该问题。重新运行C/C++ Log Diagnostics命令查看效果。

可能没有必要添加所有预定义的预处理器符号。这真的只有在有 #ifdef 的情况下才重要依赖于它们的指令,这些指令导致 VSCode 将错误的代码视为事件代码。我建议仅在浏览代码时发现 VSCode 出错的特定情况下才添加预定义符号。

最后,如果你的项目在编译器默认不搜索的地方有头文件,也就是你一般要通过-I打开编译器命令行,将它们也添加到 Include 路径。这同样适用于任何 -D参数,必须添加到定义中。

关于linux - vscode“检测到#include 错误。请更新您的 includePath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51227662/

相关文章:

python - 在 Python 中检测 Arduino 端口

c++ - 在函数内修改数组

visual-studio-code - 使用 WSL 的 VSCode 扩展调试节点

visual-studio-code - VSCode 动态 JSON 模式验证

typescript - 如何调试在 vscode/vs2015 中使用 webpack 捆绑的 typescript 代码

linux - 在 Linux CentOS 中注销当前用户

Linux/Unix tr 命令,奇怪的行为

arduino - 如何在 Atmel Studio 6 中添加头文件

linux - 安装 glib : error: redefinition of typedef 'GListStore'

c - LD_LIBRARY_PATH,linux中的共享库路径