【问题标题】:IntelliSense throws #include errors when working with Arduino in VS Code在 VS Code 中使用 Arduino 时,IntelliSense 引发 #include 错误
【发布时间】:2020-09-09 06:17:41
【问题描述】:

我想在 VS Code 中开发 Arduino 代码。因此,我安装了 Arduino IDE 和 Arduino 扩展 vor VS Code。

在 VS Code 中打开 Arduino 项目后,扩展程序为 IntelliSense 创建了以下 c_cpp_properties.json 文件(摘录):

"includePath": [
        "/Applications/Arduino.app/Contents/Java/tools/**",
        "/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/**"
],
"forcedInclude": [
        "/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/cores/arduino/Arduino.h"
],

强制包含Arduino.h具有以下相对包含:

// Some includes
#include <avr/pgmspace.h>
// Even more includes

问题在于,尽管pgmspace.h 确实存在,但它并不位于相对于Arduino.h 的路径中(它也不位于两个包含路径之一中)。将 pgmspace.h 的路径添加到包含路径并没有帮助,因为 IntelliSense 似乎正在寻找给定的相对路径。

我的问题是,是否有可能通过 c_cpp_properties.json 文件告诉 IntelliSense 忽略相对路径并只查找文件?或者您能想出另一种方法来解决这个问题吗?

【问题讨论】:

    标签: c++ visual-studio-code arduino include intellisense


    【解决方案1】:

    我自己找到了答案。如果您有同样的问题,请尝试以下操作:

    添加到settings.json:

    "C_Cpp.intelliSenseEngine": "Tag Parser"
    

    这是一个缺点,因为“标签解析器”不支持上下文。

    添加到c_cpp_properties.json:

    "configurations": [
      {
    
        ...,
    
        "browse": {
          "path": [
            "/Applications/Arduino.app/Contents/Java/tools",
            "/Applications/Arduino.app/Contents/Java/hardware/arduino/avr",
            "/Applications/Arduino.app/Contents/Java/hardware/tools/avr/avr/include"
          ],
          "limitSymbolsToIncludedHeaders": true
        }
      }
    ]
    

    【讨论】:

    • 在一台 Windows 机器上,我刚刚将“C_Cpp.intelliSenseEngine”更改为“Tag Parser”,如上所述,它运行良好。此外,我的“compilerPath”没有在 c_cpp_properties.json 中正确转义。 Windows 用户只要记住也要检查一下。
    【解决方案2】:

    Arduino.h 位于/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/cores/arduino/Arduino.h,它的sn-p如下:

    #include <avr/pgmspace.h>
    #include <avr/io.h>
    #include <avr/interrupt.h>
    

    例如第一个文件 pgmspace.h 位于 /Applications/Arduino.app/Contents/Java/hardware/tools/avr/avr/include/avr/pgmspace.h 中(例如,您可以使用 shell 命令“find / -name pgmspace.h”找到该文件),并且该路径无法找到为相对于 where 的 当然是 Arduino.h。

    但它可以相对于/Applications/Arduino.app/Contents/Java/hardware/tools/avr/avr/include 找到。将其添加到您的c_cpp_properties.json,VSCode 应该能够找到头文件。

    "includePath": [
            "/Applications/Arduino.app/Contents/Java/tools/**",
            "/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/**",
            "/Applications/Arduino.app/Contents/Java/hardware/tools/avr/avr/include"
    ],
    "forcedInclude": [
            "/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/cores/arduino/Arduino.h"
    ],
    

    【讨论】:

      猜你喜欢
      • 2018-04-24
      • 1970-01-01
      • 2019-09-15
      • 1970-01-01
      • 2018-11-11
      • 2015-10-14
      • 2020-06-23
      • 2016-12-14
      • 1970-01-01
      相关资源
      最近更新 更多