Как управлять зависимостями?


9

Я хочу включить такую ​​зависимость, как Logging . На своей странице это говорит:

  • Скачать почтовый файл
  • Поместите папку Logging в «библиотеки».

Я не хочу верить (с мышлением Maven), что именно так мы управляем зависимостями в проектах Arduino. Это означает, что каждый, кто проверяет мой пакет, должен будет повторить эти шаги локально (или вы включаете «библиотеки» в систему управления версиями). Каков наилучший способ управления зависимостями?


Нет, это то, что все делают.
Код Гориллы

Библиотеки это то, что библиотеки. Это не Maven. Это Ардуино. Это просто, так что люди без знания микроконтроллеров могут мигать светодиодом. Если вам нужны настоящие возможности IDE, используйте реальную среду IDE.
Majenko

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

Вместо этого ищите C ++ IDE или G ++ IDE. И дляcrosscompiling
Гилхад

Ответы:


6

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

Для простого проекта это работает за счет накладных расходов на копирование библиотек тут и там и использование «IDE» Ардуино. Называя программы «набросками» и манипулируя ими, скрывайте, что это в C ++. И так далее, и так далее.

Если вы хотите создавать более сложные проекты, управлять версиями, создавать хорошую среду и т. Д., Вам нужно оставить «просто путь Arduino» и начать использовать более мощные и сложные инструменты.

Я лично использую https://github.com/sudar/Arduino-Makefile https://github.com/ladislas/Bare-Arduino-Project и храню его в репозиториях GIT.

Таким образом, я могу обмениваться библиотеками между проектами в группе, а также ссылками на библиотеки вне древовидной структуры, а также подмодулями gits, которые позволяют обновлять библиотеки сторонних разработчиков, доступные для всех проектов, в том числе старых.

Я все еще использую Arduino (например, setup / loop, digitalRead и т. Д.), Но я также использую «нормальные» конструкции g ++. Позже я еще больше расскажу о простом коде C / g ++ / .., возможно, с использованием некоторой ОСРВ или около того, но сейчас мои потребности еще не так далеки. (Google "Arduino Rtos" Я сейчас читаю https://github.com/greiman/NilRTOS-Arduino )

В любом случае Arduino не является «лучшей практикой». Это должен быть «быстрый и простой способ сделать что-то, когда вы ничего не знаете». И это работает, так как любой и его собака могут начать с Arduino, и если он заинтересован, он может пойти гораздо дальше самостоятельно, или он может оставаться легким и развлекаться в любом случае.


1

Если вы хотите, чтобы проект был автономным, вы можете поместить библиотечные зависимости в эскизную папку. Таким образом, структура папок эскиза Foo с зависимостью библиотеки журналов будет выглядеть примерно так:

Foo
|_Foo.ino
|_src
  |_Logging
    |_Logging.h
    |_Logging.cpp

А в Foo.ino вы включите такую ​​библиотеку:

#include "src/Logging/Logging.h"

К сожалению, некоторые библиотеки используют неверный синтаксис включения, который все еще работает, когда библиотека установлена ​​в одной из папок библиотеки, но не находится в папке эскиза. Библиотека журналов использует правильный синтаксис включения, но иногда, чтобы поместить библиотеки в папку эскиза, вам необходимо это исправить. Например, допустим, у вас есть библиотека с именем Bar и в Bar.cpp вы видите это:

#include <Bar.h>

Это не сработает, потому что если он установлен в папке эскизов, Bar.h не будет находиться в одном из стандартных путей включения, поэтому вам нужно отредактировать Bar.cpp и изменить синтаксис включения на:

#include "Bar.h"

Что приведет к поиску локальной папки для поиска включенного файла.

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.