Хранение всех библиотек в каталоге эскизов Arduino - PullRequest
42 голосов
/ 16 января 2011

Я знаю, что вы должны помещать любые внешние библиотеки в папку "библиотеки" в каталоге установки arduino, но у меня есть проект, который использует несколько библиотек, которые я создал для проекта, и главным образом для того, чтобы весь этот код сам содержалсодержится и вне основного файла pde.Однако я попытался поместить библиотеки в тот же каталог, что и основной файл PDE, чтобы легче было синхронизировать все в Subversion (я работаю над этим на нескольких компьютерах), и я не хочу продолжать работатьназад и синхронизировать библиотеки отдельно.Кроме того, просто для того, чтобы можно было легко заархивировать папку с эскизом и знать, что она содержит все, что ей нужно.

Я попытался добавить файлы заголовков в эскиз в качестве новой вкладки, но это некажется, не работает вообще ... даже не волнует, должны ли они быть в IDE Arduino.

Я также попытался добавить библиотеки в каталог Sketch в подкаталогах (что я бы очень предпочел) и затем ссылки на них как:

#include "mylib/mylib.h"

и

#include <mylib/mylib.h>

Но оба эти результата приводят к ошибкам файла не найдены.

Возможно ли это?И, если да, как мне включить их в основной файл для сборки?Желательно в собственных подкаталогах.

Ответы [ 9 ]

12 голосов
/ 06 мая 2017

У меня была такая же проблема. Решил это для 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 Code в качестве оболочки для Arduino IDE. Но оба IDE компилируют его с этой структурой.

Ссылка: https://forum.arduino.cc/index.php?topic=445230.0

9 голосов
/ 22 января 2011

Для имеющихся у меня эскизов библиотечные файлы "*.h" и "*.cpp" фактически находятся в той же папке, что и эскиз, и я называю их как "someheader.h".Я также заметил, что если я зайду в меню sketch и add file..., файл не появится, пока я не закрою и не открою заново эскиз.

8 голосов
/ 14 ноября 2011

Я согласен с вами; Это недопустимый способ разработки программного обеспечения: каждый файл должен находиться в том же каталоге, что и основная программа!

Чтобы обойти это, я использую 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 $@

Arduino очень требователен к окончанию файла - если вы поместите файл .cpp или .cc в его каталог, он автоматически использует его в источнике, и вы не сможете включить ничего, кроме .cpp, .cc или .h - так что это единственный способ сделать это.

Я использую аналогичную уловку также, чтобы собрать файлы JavaScript здесь .

Это требует, чтобы вы запустили make после редактирования ваших файлов, но так как я все равно использую внешний редактор (Emacs), для меня это ноль хлопот.

4 голосов
/ 27 марта 2014

К сожалению, Arduino IDE ужасен и не показывает никаких признаков улучшения. Реальной системы сборки не существует, поэтому она позволяет создавать программы, которые находятся в одном каталоге.

Единственное реальное решение - написать make-файл, тогда вы можете использовать настоящую IDE. Я надеюсь, что однажды кто-то напишет плагин Arduino для QtCreator.

Вот пример makefile:

http://volker.top.geek.nz/arduino/Makefile-Arduino-v1.8

3 голосов
/ 03 августа 2011

У меня была такая же проблема (мне также нравится сохранять код автономным), поэтому я просто записываю некоторые заметки;скажем, у меня есть 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 должно отображаться в «Sketch / Import Library».

Обратите внимание, что единственный способ, которым я пока вижу, чтобы файл класса библиотеки ссылался на другие файлы библиотеки, - это включить их относительно (из «текущего местоположения»), предполагая, что они все находятся в одном и том же главном arduino-0022/libraries папка (возможно связанный вопрос переполнения стека: Возможно ли включить библиотеку из другой библиотеки, используя 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 (однако она может быть неприменима, если вы хотите автономно содержать несколько папок классов в одном каталоге).

РЕДАКТИРОВАТЬ: или просто использовать Makefile - которыйбудет работать напрямую с avr-gcc, минуя Arduino IDE (в этом случае организация файла скетча может быть несколько ослаблена) ..

1 голос
/ 05 мая 2014

Думаю, я точно знаю, что вам нужно.

у вас есть папка проекта, скажем MYPROJ_FOLDER , и вы хотите включить папку Библиотеки , которая содержит больше дочерних папокдля ваших пользовательских библиотек.

вам необходимо сделать следующее: 1- создать папки следующим образом:

-MyProjFolder
-MyProjFolder/MyProjFolder        

, а затем создать файл с именем папки с расширением .ino -MyProjFolder /MyProjFolder / MyProjFolder.ino

2 - создать папку с библиотеками: -MyProjFolder / library <<<<< name is not option должна называться так. </p>

3- затем создать свои собственные библиотеки-MyProjFolder / library / lib1 -MyProjFolder / library / lib1 / lib1.cpp -MyProjFolder / library / lib1 / examples <<<< это папка -MyProjFolder / library / lib1/ examples / <strong>example1

повторять шаг 3 столько раз, сколько вы хотите

, также проверять http://arduino.cc/en/Guide/Libraries

0 голосов
/ 26 августа 2017

Что сработало для меня, так это создать каталог, например «src» под эскизом dir, и под ним каталог для каждой личной библиотеки.

Пример:

У меня есть проект с именем ObstacleRobot, в котором находится папка для моего эскиза с именем respclerobot (автоматически создается в среде IDE) и там мой эскиз "

До сих пор у нас есть:

 /ObstacleRobot
    /obstaclerobot
       obstacleRobot.ino

Затем я хотел включить личную библиотеку, которая была полностью связана с этим проектом и не имела смысла включать ее в библиотеки IDE, ну, на самом деле, я хочусделать это для каждой части робота, но я все еще работаю над этим.

В конце концов у меня сработало:

 /ObstacleRobot
    /obstaclerobot
       obstacleRobot.ino
       /src
          /Sonar
             Sonar.h
             Sonar.cpp

Тогда что вы должны сделать вОсновной эскиз заключается в следующем:

#include "src/Sonar/Sonar.h"

И это все.

0 голосов
/ 24 мая 2015

Следуя указаниям Hefny, сделайте ваш проект примером для вашей библиотеки.

Например (Unix env), допустим, библиотеки находятся в ~ arduino / library

Вы создаете свойпроект ~ arduino / library / MyProject, туда идут ваши библиотеки (например, ~ / arduino / library / MyProject / module1.h ~ / arduino / library / MyProject / module1.cpp ~ / arduino / library / MyProject / module2.h ~ /arduino / библиотеки / MyProject / module2.cpp

Теперь: mkdir -p ~ arduino / библиотеки / MyProject / examples / myproj

редактировать ~ arduino / библиотеки / MyProject / examples / myproj / myproj.ino (обратите внимание, что это не examples / myproj.ino, а examples / myproj / myproj.ino)

Перезапустите IDE, вы должны найти свой проект в меню File / Example / MyProject.

Также обратите внимание, что вы включаете с помощью #include

0 голосов
/ 10 апреля 2015

Почему бы нам просто не написать сценарий с помощью одной команды копирования, копирующей наши библиотеки из того места, где наша библиотека находится в папке библиотеки IDE arduino?

Таким образом, мы сохраняем структуру файла, которую хотим, и используем требования библиотеки IDE без суеты.

Как-то так у меня работает:

cp -r mylibs/* ~/Documents/programs/arduino-1.5.8/libraries/.

Обратите внимание, что пути указаны относительно моей собственной файловой структуры.

Надеюсь, это кому-нибудь поможет. Это включает в себя мою будущую личность, что я держу пари, что буду читать это в ближайшем будущем ... как обычно!

J

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...