是否可以使用Arduino IDE从其他库中包含库?

Rob*_*ins 18 c++ ide arduino include

我正在尝试编写一个Arduino库(实际上是一个C++类),它本身引用了我在Mac的〜/ Documents/Arduino/libraries目录中安装的另一个库.

在我正在写的图书馆的.cpp的顶部,我试过了

#include <ReferencedLibrary.h>
Run Code Online (Sandbox Code Playgroud)

#include "ReferencedLibrary.h"
Run Code Online (Sandbox Code Playgroud)

......两者都不起作用.我可以#include <ReferencedLibrary.h>在〜/ Documents/Arduino目录中成功绘制草图.我错过了什么或者这是Arduino IDE/makefile的限制吗?有解决方法吗?

小智 12

我已经能够通过使用相对路径在另一个Arduino库中包含一个库.例如,要将AbstractSwitch库包含到DigitalSwitch库中,假设这两个库都位于Arduino标准库文件夹中的各自单独的文件夹中,则可以使用以下include语句:

#include "../AbstractSwitch/AbstractSwitch.h"
Run Code Online (Sandbox Code Playgroud)

换句话说,您的include语句应为:

#include "../LibraryFolder/LibraryHeaderFile.h"
Run Code Online (Sandbox Code Playgroud)


nic*_*ten 11

这里的文档http://www.arduino.cc/en/Hacking/BuildProcess说明:

include路径包括sketch的目录,目标目录(/ hardware/core //)和avr include目录(/ hardware/tools/avr/avr/include /),以及任何库目录(在/ hardware/libraries中) /)包含主草图文件包含的头文件.

这意味着如果您#include "ReferencedLibrary.h"从主草图文件中,这会导致该文件的libraries目录被添加到要包含的其他库的包含路径中.有点破解,但它确实可以在我的Mac上运行.

  • 这是"邪恶的".库的概念是抽象功能并提供简洁的API供使用.`#include"lib.h"`应该只需要获取库(假设它在加载路径中).要求图书馆的客户了解图书馆的内部运作方式是完全错误的. (16认同)
  • 这是正确的答案.它不是一个黑客,它避免了新用户必须知道库的位置,避免了复杂性或需要项目文件和其他更高级的选项.这就是为什么Arduino如此简单易用的原因之一.Visual Studio和Atmel Studio插件的工作方式相同.保持一切兼容. (2认同)

aga*_*hat 7

这个问题在Arduino 1.6.6版本中得到了解决.1.6.6的发行说明提到库到库依赖关系已得到修复.

库到库依赖关系:当草图导入库,并且该库使用另一个库时,IDE将在不必向草图添加无用的#include的情况下找到它

将您的版本更新为1.6.6或更高版本将解决您的问题.