是否可以使用Arduino IDE包含来自另一个库的库
Is it possible to include a library from another library using the Arduino IDE?
我正在尝试编写一个Arduino库(实际上是一个C++类),它本身引用了我在Mac的~/Documents/Arduino/libraries目录中安装的另一个库。
在我正在编写的库的.cpp顶部,我尝试了
#include <ReferencedLibrary.h>
和
#include "ReferencedLibrary.h"
两者都不起作用。我可以成功地从我的~/Documents/Arduino目录中的草图中#include <ReferencedLibrary.h>
。我是遗漏了什么,还是这是Arduino IDE/makefile的限制?有变通办法吗?
我已经能够通过使用相对路径将一个库包含在另一个Arduino库中。例如,要将AbstractSwitch库包含到DigitalSwitch库中,假设这两个库都位于Arduino标准库文件夹中各自独立的文件夹中,则可以使用以下include语句:
#include "../AbstractSwitch/AbstractSwitch.h"
换句话说,您的包含声明应该是:
#include "../LibraryFolder/LibraryHeaderFile.h"
此处的文档https://github.com/arduino/Arduino/wiki/Build-Process状态:
包含路径包括草图的directory,目标目录(/硬件/核心//)和avr include目录(硬件/工具/avr/avr/include/),以及任何库目录(在/硬件/库/)包含一个头文件包含在主草图文件中。
这意味着,如果从主草图文件中#include "ReferencedLibrary.h"
,则会将该文件的libraries
目录添加到要包含的其他库的包含路径中。有点破解,但它确实适用于我的Mac。
这个问题在Arduino 1.6.6版本中得到了解决。1.6.6的发行说明提到,库到库的依赖关系已经修复。
库到库的依赖关系:当草图导入一个库,而该库使用另一个库时,IDE会发现,而无需在草图中添加无用的#include
将您的版本更新到1.6.6或更新版本将解决您的问题。
据我所知,使用Arduino环境,您无法从自己的另一个库访问自己的库。没有办法添加路径,所以编译器根本没有办法找到代码。这使得编写使用另一个库中的代码的库变得困难。我的网络研究表明,这是一个多年来一直存在的问题,但据我所知,还没有得到解决。我怀疑在实现细节方面存在困难,或者可能是希望以牺牲能力为代价来保持系统的简单性。
当然,您总是可以将代码剪切并粘贴到每个新库中,但这是非常次优的。您还可以用一对.h和.cpp文件中的所有代码编写一个巨大的库。这也不是很令人满意,但我偶尔也会这样做。
然而,在你自己的库中使用标准的Arduino库是有问题的,你可以把它放在你的sketchbook/libraries目录中。由于草图包含到标准库位置的路径,并链接标准库代码,因此可以在草图中包含感兴趣的标准库的头文件。在其下方,也在草图中,包括您自己的库头文件。然后,标准库将可用于库和草图。
不推荐的方法:可以通过剪切boards.txt文件将基本上任何外部库代码添加到Arduino IDE构建中。c/cpp标志中的标头和ld标志中的库。这对于使用外部工具的库开发可能很有用(cmake/QT创建者今天对我来说)。
我修改了/home/pekka/arduino1.8.5/hardware/teensy/avr/boards.txt,在gcc include path和E_OS_arduino define中添加了"/coderoot",修改了以下行:
teensy36.build.flags.cpp=-fno异常-flide构造函数-std=gnu++14-Wno错误=缩小-fno rtti-I/coderoot-DE_OS_arduino
teensy36.build.flags.c=-I/coderoot-DE_OS_arduino
- 在作为静态成员包含在另一个类中的类的构造函数中使用 cout
- 检查路径是否包含C++中的另一个路径
- C++ .h 包含从一个类传递到另一个类的类和.cpp
- CMake 将库包含在另一个库中
- 如何将包含另一个对象向量的对象保存到文件中,并使用C++中的二进制文件从文件中读回?
- 创建一个 const std::vector ,其中包含另一个 const std::vector 和其他值
- 包含来自另一个文件的函数会导致范围错误(openFoam)
- 如何为包含另一个类实例的数组制作常量 getter?
- 使用按位运算确定值是否包含另一个值
- C++将包含的库 (ref DLL) 从根目录更改为另一个位置
- 如何在我的 cmake 项目中包含另一个 cmake 项目的头文件?
- 继承一个类,该类继承另一个已包含的类
- 如何查找哪个标头在包含树中包含另一个标头
- 将 2 个链表中包含的相同值写入另一个链表
- 如何从另一个包含目录中的标头访问包含目录中的标头
- 如何将另一个项目中用 C 编写的源代码包含在我自己的项目中,C++在 Visual Studio 中
- 包含另一个实例的特征实例,该实例持有固定大小的特征对象
- 如何隐藏另一个包含的静态库的API
- 如何从文件中的类调用,以使用着色器显示在另一个包含gl代码的文件中(其中两个文件都在jni文件夹中)
- 如何在另一个包含对象的文件中创建一个函数并从 main 调用它