【问题标题】:vscode "#include errors detected. Please update your includePathvscode "#include 检测到错误。请更新您的 includePath
【发布时间】:2018-12-16 01:58:04
【问题描述】:

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

"message": "#include 检测到错误。请更新您的 includePath。此翻译单元 (/home/harold/Arduino/Saaf_Curing/Saaf_Curing.ino) 的 IntelliSense 功能将由标签解析器提供。",

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

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

【问题讨论】:

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


    【解决方案1】:

    虽然问题提到了 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++ 编译器,并设置“智能感知模式”以尽可能匹配编译器。

    您可能还需要调整编译器参数,尤其是当编译器能够为多个目标生成代码时,例如 32 位和 64 位代码。 (如果您不知道这意味着什么,请先跳过它。)

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

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

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

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

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

    现在根据需要调整 includePath

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

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

    最后,如果您的项目在编译器默认不搜索的地方有头文件,也就是说,您通常必须在编译器命令行上传递-I 开关,将它们也添加到包含路径中。任何-D 参数也是如此,必须将其添加到定义中。

    【讨论】:

    【解决方案2】:

    这是由于扩展在初始化时缺少一些包含路径

    将缺少的行添加到您的 c_cpp_properties.json 中

    "includePath": [
    "<arduino ide installation folder>\\tools\\**",
    "<arduino ide installation folder>\\hardware\\arduino\\avr\\**",
    "<arduino ide installation folder>\\hardware\\tools\\**",
    "<arduino ide installation folder>\\hardware\\arduino\\avr\\cores\\arduino"
    ]
    

    还在“配置”下添加"defines": [ "USBCON" ] 以使串行类与智能感知一起工作

    【讨论】:

    • 对我来说,这是我所缺少的解决方案 ... hardware/tools/** 路径中的文件夹。干杯!
    【解决方案3】:

    尝试使用 platformIO 扩展,它让您的生活更轻松。我个人将 VScode 与 platformIO 一起用于我的 Arduino 和 ESP32 项目。

    【讨论】:

      【解决方案4】:

      我刚刚成功地浪费了一个小时寻找堆栈溢出问题的解决方案,但一切都是徒劳的,现在我已经找到了解决方案,如果您使用的是 linux,只需从终端安装 g++ 编译器,

      sudo apt install g++

      " 你可以走了。

      【讨论】:

        猜你喜欢
        • 2021-09-20
        • 2020-10-10
        • 1970-01-01
        • 1970-01-01
        • 2018-01-16
        • 1970-01-01
        • 2021-04-23
        • 1970-01-01
        相关资源
        最近更新 更多