Wie verwalte ich Abhängigkeiten?

9

Ich möchte eine Abhängigkeit wie Protokollierung einschließen . Auf seiner Seite steht:

  • Zip-Datei herunterladen
  • Legen Sie den Protokollierungsordner in "Bibliotheken \" ab.

Ich möchte nicht glauben (mit einer Maven-Denkweise), dass wir auf diese Weise Abhängigkeiten in Arduino-Projekten verwalten. Das bedeutet, dass jeder, der mein Paket auscheckt, diese Schritte lokal wiederholen muss (oder fügen Sie "Bibliotheken \" in die Versionskontrolle ein). Was ist die beste Vorgehensweise für das Abhängigkeitsmanagement?

Markus Malkusch
quelle
Nein, das ist es, was jeder tut.
Code Gorilla
Bibliotheken sind Bibliotheken. Das ist nicht Maven. Das ist Arduino. Es ist einfach, so dass Personen ohne Kenntnis von Mikrocontrollern eine LED zum Blinken bringen können. Wenn Sie echte IDE-Funktionen wünschen, verwenden Sie eine echte IDE.
Majenko
1
Nun, ich verwende den ersten Treffer in Google für Arduino IDE, aber das hilft mir nicht bei Abhängigkeiten. Um ein LED-Blinken zu aktivieren, ist keine Bibliothek erforderlich, und ich stimme zu, dass die Dinge einfach sein sollten. Genau aus diesem Grund bitte ich um Abhängigkeitsmanagement.
Markus Malkusch
Suchen Sie stattdessen nach C ++ IDE oder G ++ IDE. Und fürcrosscompiling
Gilhad

Antworten:

6

Arduino soll ein einfacher Weg für nicht-technische Leute sein und versteckt so viel wie möglich aus der Sicht, um einfach zu sein.

Für einfache Projekte geht es zu Lasten des Kopierens von Bibliotheken hier und da und der Verwendung von Arduinos "IDE". Das Aufrufen von Programmen "skizziert" und manipuliert es, um zu verbergen, dass es sich in C ++ befindet. Und so weiter und so fort.

Wenn Sie kompliziertere Projekte, Versionskontrolle, eine gute Umgebung usw. erstellen möchten, müssen Sie den "einfachen Arduino-Weg" verlassen und leistungsfähigere und kompliziertere Tools verwenden.

Ich persönlich verwende https://github.com/sudar/Arduino-Makefile https://github.com/ladislas/Bare-Arduino-Project und habe es in GIT-Repositories.

Auf diese Weise kann ich Bibliotheken zwischen Projekten in Gruppen teilen, auch Links zu Bibliotheken außerhalb der Baumstruktur sowie Git-Submodule, sodass Sie aktualisierte Bibliotheken von Drittanbietern für alle Projekte verfügbar haben können, auch für die alten.

Ich benutze immer noch viel Arduino (wie Setup / Loop, DigitalRead und so), aber ich benutze auch "normale" g ++ - Konstrukte auf dem Weg. Später werde ich wahrscheinlich noch mehr von einfachem C / g ++ / .. -Code abweichen, wahrscheinlich unter Verwendung von RTOS oder so, aber jetzt sind meine Anforderungen noch nicht so weit. (google "arduino rtos" Ich lese gerade https://github.com/greiman/NilRTOS-Arduino )

Arduino ist sowieso nicht als "Best Practice" gedacht. Es soll "schnell und einfach etwas tun, wenn man nichts weiß". Und es funktioniert, da jeder und sein Hund mit Arduino anfangen können und wenn er interessiert ist, kann er alleine weiter gehen, oder er kann einfach bleiben und trotzdem Spaß haben.

Gilhad
quelle
1

Wenn Sie möchten, dass das Projekt in sich geschlossen ist, können Sie die Bibliotheksabhängigkeiten in den Skizzenordner einfügen. Die Ordnerstruktur der Foo-Skizze mit der Abhängigkeit der Protokollierungsbibliothek würde also ungefähr so ​​aussehen:

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

Und in Foo.ino werden Sie die Bibliothek wie folgt aufnehmen:

#include "src/Logging/Logging.h"

Leider verwenden einige Bibliotheken die falsche Include-Syntax, die immer noch funktioniert, wenn die Bibliothek in einem der Bibliotheksordner installiert ist, jedoch nicht, wenn sie sich im Skizzenordner befindet. Die Protokollierungsbibliothek verwendet zwar die richtige Include-Syntax, aber manchmal müssen Sie dies beheben, um Bibliotheken in den Skizzenordner zu legen. Angenommen, Sie haben eine Bibliothek mit dem Namen Bar und in Bar.cpp sehen Sie Folgendes:

#include <Bar.h>

Dies funktioniert nicht, da sich Bar.h bei Installation im Skizzenordner nicht in einem der Standard-Include-Pfade befindet. Sie müssen also Bar.cpp bearbeiten und die Include-Syntax in Folgendes ändern:

#include "Bar.h"

Dadurch wird der lokale Ordner nach der enthaltenen Datei durchsucht.

Der Nachteil dieses Systems besteht darin, dass Sie möglicherweise mehrere Kopien einer Bibliothek haben, sodass das Aktualisieren oder Ändern jeder Kopie aufwändiger ist. Dies kann natürlich auch von Vorteil sein, da jedes Projekt über eine eigene bekannte Version der Bibliothek verfügen kann, die nicht von Aktualisierungen betroffen ist, die Sie möglicherweise an derselben Bibliothek vornehmen, die in anderen Projekten verwendet wird.

Im Allgemeinen füge ich der Dokumentation für ein Projekt nur Anweisungen zum Installieren von Bibliotheksabhängigkeiten auf die übliche Weise hinzu. Dies sollte innerhalb der Möglichkeiten eines durchschnittlichen Arduino-Benutzers liegen. Wenn eine bestimmte Version einer Bibliothek erforderlich ist, dokumentieren Sie dies. Es gibt jedoch Fälle, in denen ich ein eigenständiges Projekt an jemanden übergeben wollte, der mit der Verwendung der Arduino-IDE nicht vertraut ist, und in dem ich das oben beschriebene System für alle erforderlichen Bibliotheken von Drittanbietern verwendet habe.

per1234
quelle