Arduino:包括库之间

Arduino: includes between libraries

我正在尝试将 IRLIB2 包含在我的草图中。作为一个沙箱,我正在使用这段代码(没有 include 编译得很好):

#include <IRLibAll.h>

void setup(){}
void loop(){}

IRLib2 被打包成一组单独的库。其中有五个,都必须通过 arduino 库管理器单独安装。我已经按照存储库中关于此的说明进行操作。我的写生簿文件夹现在看起来像这样:

这种布局给我带来了问题。 include 语句生成以下错误消息:

/home/lhk/sketchbook/libraries/IRLib2/IRLibAll.h:22:0,
                 from sketch_mar04f.ino:1:
/home/lhk/sketchbook/libraries/IRLib2/IRLibDecodeBase.h:13:28: fatal error: IRLibProtocols.h: No such file or directory
compilation terminated.

缺少的 IRLibProtocols.h 位于 IRLibProtocols 库中。

这似乎是一个常见问题:库相互使用。在 CMake 中,我可以适当地设置包含目录,但在这里我能看到的唯一工具是来自 arduino IDE.

的 "Add Library" 对话

IRLibAll.h 应该包含来自 IRLib2 的所有内容。也可以单独导入库,但这并不能解决包含路径的问题。 我如何设置我的代码以正确包含相互引用的库?

我还在存储库上创建了一个 issue

Arduino IDE 版本 1.6.5-r5 及更早版本通常需要您将 #include 指令添加到您的草图以获取库依赖项,以便 Arduino IDE 知道哪些文件夹需要添加到包含路径。

因此,一种解决方案是将以下行添加到您的草图中:

#include <IRLibProtocols.h>
#include <IRLibRecv.h>
#include <IRLibRecvPCI.h>
#include <IRLibFreq.h>

在 Arduino IDE 1.6.6 中使用 arduino-builder 工具添加了一个改进的依赖扫描系统。使用任何最新版本的 Arduino IDE 您的草图将在不添加任何额外的 #include 指令的情况下编译。

因此,更好的解决办法是更新Arduino官方最新版本IDE。

由于[许可证文件问题[(https://github.com/arduino/Arduino/pull/2703), when you install the Arduino IDE via apt install arduino, etc. you get a very outdated version, which is a somewhat modified equivalent of 1.0.5. You miss out on all the improvements that have been made in the last 4 years. It's best to always install the official Arduino IDE downloaded from https://www.arduino.cc/en/Main/Software.