Arduino:包括库之间

时间:2018-03-04 18:40:25

标签: arduino arduino-ide

我试图在我的草图中加入IRLIB2。作为一个沙盒,我使用了这个代码(没有包含就编译好了):

#include <IRLibAll.h>

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

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

这种布局给我带来了麻烦。 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中,我可以适当地设置包含目录,但是我能看到的唯一工具是&#34;添加库&#34;来自arduino IDE的对话。

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

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

1 个答案:

答案 0 :(得分:1)

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

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

#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),当您通过apt install arduino等安装Arduino IDE时,您会得到一个非常过时的版本,这是一个稍微修改过的版本,相当于1.0.5 。您错过了过去4年中所做的所有改进。最好始终安装从https://www.arduino.cc/en/Main/Software下载的官方Arduino IDE。