Можно ли включить библиотеку из другой библиотеки, используя Arduino IDE? - PullRequest
18 голосов
/ 28 июня 2011

Я пытаюсь написать библиотеку Arduino (фактически класс C ++), которая сама ссылается на другую библиотеку, которую я установила в каталоге ~ / Documents / Arduino / library моего Mac.

В верхней части .cpp библиотеки, которую я пишу, я попробовал

#include <ReferencedLibrary.h>

и

#include "ReferencedLibrary.h"

... ни одна из которых не работает. Я могу успешно #include <ReferencedLibrary.h> из эскизов в моей директории ~ / Documents / Arduino. Я что-то упустил или это ограничение IDE / make-файла Arduino? Есть ли обходной путь?

Ответы [ 5 ]

12 голосов
/ 22 ноября 2011

Я смог включить библиотеку в другую библиотеку Arduino, используя относительный путь. Например, чтобы включить библиотеку AbstractSwitch в библиотеку DigitalSwitch, предполагая, что обе эти библиотеки находятся в своих собственных отдельных папках в стандартной папке библиотеки Arduino, вы можете использовать следующий оператор include:

#include "../AbstractSwitch/AbstractSwitch.h"

Другими словами, ваш оператор включения должен читать:

#include "../LibraryFolder/LibraryHeaderFile.h"
11 голосов
/ 28 июня 2011

Документация здесь https://github.com/arduino/Arduino/wiki/Build-Process гласит:

Включенный путь включает эскиз каталог, целевой каталог (/ hardware / core //) и каталог включения AVR (/ аппаратные средства / инструменты / АРН / АРН / включить /), а также любые каталоги библиотеки (в / аппаратные средства / библиотеки /) которые содержит заголовочный файл, который включены в основной файл эскиза.

Это означает, что если вы #include "ReferencedLibrary.h" из основного файла эскиза, это приведет к добавлению каталога libraries этого файла в путь включения для включения других библиотек. Немного взломано, но оно работает на моем Mac.

6 голосов
/ 16 августа 2016

Эта проблема была решена в выпуске Arduino 1.6.6.В примечаниях к выпуску 1.6.6 упоминается, что зависимости между библиотеками были исправлены.

Зависимости библиотеки от библиотеки: когда ваш эскиз импортирует библиотеку, а эта библиотека использует другую, IDE обнаружит безвам нужно добавить бесполезный #include к вашему эскизу

Обновление вашей версии до 1.6.6 или новее решит вашу проблему.

3 голосов
/ 05 ноября 2011

Используя среду Arduino, насколько я понимаю, вы не можете получить доступ к своей собственной библиотеке из другой собственной библиотеки.Нет способа добавить пути, поэтому компилятору просто не найти код.Это затрудняет написание библиотек, использующих код в другой вашей библиотеке.Мое исследование сети показывает, что это было проблемой в течение многих лет, но, насколько мне известно, не было решено.Я подозреваю, что есть трудности в деталях реализации или, возможно, желание сделать систему простой за счет возможностей.

Конечно, вы всегда можете вырезать и вставлять код в каждую новую библиотеку, но это очень малооптимальный.Вы также можете написать одну огромную библиотеку со всем вашим кодом в одной паре файлов .h и .cpp.Это также не очень удовлетворительно, но я иногда делал это.

Однако есть обходной путь для использования стандартных библиотек Arduino в вашей собственной библиотеке, которые вы помещаете в каталог sketchbook / library.Поскольку эскизы содержат пути к стандартным местам расположения библиотеки и связывают код стандартной библиотеки, вы можете включить в свой эскиз файл заголовка для интересующей стандартной библиотеки.Ниже, также в вашем эскизе, включите свой собственный файл заголовка библиотеки.Стандартная библиотека станет доступной как для вашей библиотеки, так и для эскиза.

1 голос
/ 13 сентября 2018

Не рекомендуемый метод: можно добавить практически любой код внешней библиотеки в сборку Arduino IDE с помощью файла knifing boards.txt. Заголовки в флагах c / cpp и библиотеки в флагах ld. Это может быть полезно для разработчика библиотеки с использованием внешних инструментов (cmake / QT creator для меня сегодня).

Я изменил /home/pekka/arduino-1.8.5/hardware/teensy/avr/boards.txt, добавив "/ coderoot" в gcc include path и E_OS_arduino define, модифицированные строки ниже:

teensy36.build.flags.cpp = -fno-exception -felide-constructors -std = gnu ++ 14 -Wno-error = сужение -fno-rtti -I / coderoot -DE_OS_arduino

teensy36.build.flags.c = -I / coderoot -DE_OS_arduino

...