Сохранение всех библиотек в эскизном каталоге Arduino
Я знаю, что вы должны размещать любые внешние библиотеки в папке "library" каталога установки arduino, но у меня есть проект, который использует несколько библиотек, которые я создал для проекта, и в основном для того, чтобы сохранить весь этот код содержащий и выходящий из основного файла pde. Тем не менее, я попытался поместить библиотеки в тот же каталог, что и основной файл PDE, чтобы я мог более легко сохранить все синхронизированное в subversion (я работаю над этим на нескольких компьютерах), и я не хочу продолжать идти назад и синхронизировать библиотеки по отдельности. Кроме того, просто для того, чтобы легко застегивать папку эскиза и знать, что он содержит все, что ему нужно.
Я попытался добавить заголовочные файлы к эскизу в качестве новой вкладки, но это, похоже, не работает вообще... даже не волнует, должны ли они встраивать IDE в arduino.
Я также попытался добавить библиотеки в каталог эскиза в подкаталоги (что бы я хотел), а затем привязать к ним как:
#include "mylib/mylib.h"
и
#include <mylib/mylib.h>
Но оба эти результата приводят к ошибкам, не найденным в файле.
Возможно ли это? И если да, то как включить их в основной файл для построения? Предпочтительно в своих собственных подкаталогах.
Ответы
Ответ 1
Для эскизов, которые у меня есть, файлы библиотеки "*.h"
и "*.cpp"
фактически находятся в той же папке, что и эскиз, и я называю их как "someheader.h"
. Я также заметил, что если я войду в меню sketch
и add file...
, что файл не появится, пока я не закрою и не открою эскиз.
Ответ 2
Я согласен с вами; это невыносимый способ разработки программного обеспечения: для этого требуется, чтобы каждый файл находился в том же каталоге, что и основная программа!
Чтобы обойти это, я использую make
, чтобы собрать один файл .h
из моих источников .h
и .cpp
- вы можете видеть, что это используется в этот Makefile:
PREPROCESS=gcc -E -C -x c -iquote ./src
# -E : Stop after preprocessing.
# -C : Don't discard comments.
# -x c : Treat the file as C code.
# -iquote ./src : Use ./src for the non-system include path.
TARGETS=sketches/morse/morse.h
all: $(TARGETS)
clean:
rm $(TARGETS)
%.h: %.h.in
$(PREPROCESS) $< -o [email protected]
Arduino очень придирчив к окончанию файла - если вы поместите файл .cpp
или .cc
в свой каталог, он автоматически использует его в источнике, и вы не можете включить ничего, кроме .cpp
, .cc
или .h
- так что это единственный способ сделать это.
Я использую подобный трюк и для компоновки файлов JavaScript здесь.
Это требует, чтобы вы запускали make
после редактирования ваших файлов, но поскольку я использую внешний редактор (Emacs) в любом случае, для меня это является нулевой проблемой.
Ответ 3
У меня была такая же проблема. Решил его для Arduino IDE > 1.8. Кажется специальностью в новых IDE (?) Согласно ссылке (см. Нижнюю ссылку).
Перед созданием папки библиотеки вам нужно добавить подкаталог "src". Таким образом, ваш проект должен выглядеть следующим образом:
/SketchDir (with *.ino file)
/SketchDir/src
/SketchDir/src/yourLib (with .h and .cpp file)
и, наконец, в вашем эскизе вы ссылаетесь:
#include "src/yourLib/yourLib.h"
иначе в моем случае - если мне не хватает папки "src" - я получаю сообщение об ошибке, что он не может найти файл yourLib.cpp.
Примечание. Я использую систему Windows, если она отличается и фактически является VS-кодом в качестве оболочки для Arduino IDE. Но оба IDE составляют эту структуру.
Литература:
https://forum.arduino.cc/index.php?topic=445230.0
Ответ 4
У меня была одна и та же проблема (я также хотел бы сохранить код самодостаточным), поэтому я просто напишу несколько заметок; скажем, у меня есть MyPdeSketch.pde
с помощью MyLibClass.cpp
; то я организовал это как
/path/to/skdir/MyPdeSketch/MyPdeSketch.pde
/path/to/skdir/MyPdeSketch/MyLibClass/MyLibClass.cpp
/path/to/skdir/MyPdeSketch/MyLibClass/MyLibClass.h
(В принципе, /path/to/skdir/
здесь эквивалентно ~/sketchbook/
)
Что сработало для меня, это что-то вроде:
mkdir /path/to/arduino-0022/libraries/MyLibClass
ln -s /path/to/skdir/MyPdeSketch/MyLibClass/MyLibClass.* /path/to/arduino-0022/libraries/MyLibClass/
После перезапуска IDE MyLibClass
должен отображаться в разделе "Библиотека эскиза/импорта".
Обратите внимание, что единственный способ, которым я могу видеть до сих пор для файла класса библиотеки, ссылаться на другие файлы библиотеки, - это относить их относительно (из "текущего местоположения" ), если они все находятся в одной и той же основной папке arduino-0022/libraries
( возможно связанный с проблемой Stack Overflow: Возможно ли включить библиотеку из другой библиотеки с помощью Arduino IDE?).
В противном случае также можно будет символически привязать каталог MyLibClass
непосредственно к arduino-0022/libraries
(вместо того, чтобы вручную создавать каталог, а затем символически связывать файлы). По этой же причине символическая привязка к альтернативному местоположению ~/sketchbook/libraries
также может быть проблематичной.
Наконец, возможно, лучшей организацией может быть:
/path/to/skdir/MyLibClass/MyLibClass.cpp
/path/to/skdir/MyLibClass/MyLibClass.h
/path/to/skdir/MyLibClass/MyPdeSketch/MyPdeSketch.pde
... который после симлинклинга на libraries
заставил бы MyPdeSketch
показать в примерах библиотеки MyLibClass
в среде Arduino IDE (однако это может быть неприменимо, если вы хотите скомпоновать несколько папок класса под одним каталогом).
EDIT: или просто используйте Makefile - который будет работать непосредственно с avr-gcc
, минуя IDE Arduino (в этом случае организация файла эскиза может быть несколько ослаблена).
Ответ 5
К сожалению, Arduino IDE ужасен и не показывает признаков улучшения. Нет реальной системы построения, поэтому она позволяет создавать программы, которые находятся в одном каталоге.
Единственное реальное решение - написать make файл, тогда вы можете использовать реальную среду IDE. Я надеюсь, что однажды кто-нибудь напишет плагин Arduino для QtCreator.
Вот пример makefile:
http://volker.top.geek.nz/arduino/Makefile-Arduino-v1.8
Ответ 6
Думаю, я знаю, что вам нужно.
у вас есть папка проекта: MYPROJ_FOLDER, и вы хотите добавить папку Библиотеки, которая содержит больше папок для ваших пользовательских библиотек.
вам нужно сделать следующее:
1- создайте папки следующим образом:
-MyProjFolder
-MyProjFolder/MyProjFolder
а затем создайте файл с именем папки в расширении .ino -MyProjFolder/MyProjFolder/MyProjFolder.ino
2- создать папку с библиотекой: -MyProjFolder/libraries < < < имя не является опцией, должно быть названо так.
3- затем создайте свои собственные библиотеки -MyProjFolder/библиотеки/ lib1 -MyProjFolder/библиотеки/lib1/lib1.cpp -MyProjFolder/libraries/lib1/ примеры < < < это папка -MyProjFolder/libraries/lib1/examples/ example1
повторите шаг 3 столько, сколько хотите
также проверьте http://arduino.cc/en/Guide/Libraries
Ответ 7
Что сработало для меня, так это создать каталог, например, "src" в каталоге эскиза, и под ним каталог для каждой личной библиотеки.
Пример:
У меня есть проект под названием ObstacleRobot, под которым находится папка для моего эскиза, называемая препятствие (автоматически созданное IDE) и там мой эскиз "препятствиеRobot.ino"
До сих пор мы имеем:
/ObstacleRobot
/obstaclerobot
obstacleRobot.ino
Затем мне захотелось включить личную библиотеку, полностью связанную с этим проектом, и не имела смысла включать ее в библиотеки IDE, но на самом деле я хочу сделать это для каждой части робота, но я все еще работаю на нем.
В конце концов я работал у меня:
/ObstacleRobot
/obstaclerobot
obstacleRobot.ino
/src
/Sonar
Sonar.h
Sonar.cpp
Тогда то, что вы должны сделать в основном эскизе, - это записать include следующим образом:
#include "src/Sonar/Sonar.h"
И все.
Ответ 8
Следуя строкам Hefny, сделайте ваш проект примером для вашей библиотеки.
Например (Unix env), скажем, библиотеки находятся в ~ arduino/libraries
Создайте свой проект ~ arduino/libraries/MyProject, ваши библиотеки идут туда (например, ~/arduino/libraries/MyProject/module1.h ~/arduino/libraries/MyProject/module1.cpp ~/arduino/libraries/MyProject/module2.h ~/arduino/libraries/MyProject/module2.cpp
Сейчас: mkdir -p ~ arduino/libraries/MyProject/examples/myproj
edit ~ arduino/libraries/MyProject/examples/myproj/myproj.ino(обратите внимание, что это не примеры /myproj.ino, но примеры /myproj/myproj.ino)
Перезагрузите среду IDE, вы должны найти свой проект в меню File/Example/MyProject.
Также обратите внимание, что вы включаете include С#include
Ответ 9
Почему мы не пишем script с помощью одной команды копирования, копируя наши библиотеки, где бы наша библиотека не находилась в папке библиотеки IDE arduino?
Таким образом, мы сохраняем нужную структуру файлов и без проблем используем требования библиотеки IDE.
Что-то вроде этого работает для меня:
cp -r mylibs/* ~/Documents/programs/arduino-1.5.8/libraries/.
Обратите внимание, что пути относятся к моей собственной структуре файлов.
Надеюсь, это поможет кому-то. Это включает в себя мое будущее, которое, я уверен, будет читать это в ближайшем будущем... как обычно!
J