Bewahren Sie alle Bibliotheken im Arduino-Sketch-Verzeichnis auf

Lesezeit: 6 Minuten

Ich weiß, dass Sie alle externen Bibliotheken im Ordner “Bibliotheken” des Arduino-Installationsverzeichnisses ablegen sollen, aber ich habe ein Projekt, das mehrere Bibliotheken verwendet, die ich für das Projekt erstellt habe, und hauptsächlich, um den gesamten Code in sich geschlossen und außerhalb zu halten der Haupt-pde-Datei. Ich habe jedoch versucht, die Bibliotheken im selben Verzeichnis wie die Haupt-PDE-Datei zu platzieren, damit ich in Subversion einfacher alles synchronisieren kann (ich arbeite auf mehreren Computern daran) und ich möchte nicht weitermachen müssen zurück und synchronisieren die Bibliotheken separat. Auch nur, um den Skizzenordner einfach zippen zu können und zu wissen, dass er alles enthält, was er braucht.

Ich habe versucht, die Header-Dateien als neue Registerkarte zur Skizze hinzuzufügen, aber das scheint überhaupt nicht zu funktionieren … egal, ob sie in der Arduino-IDE angezeigt werden sollten.

Ich habe auch versucht, die Bibliotheken in Unterverzeichnissen zum Skizzenverzeichnis hinzuzufügen (was ich sehr bevorzugen würde) und sie dann wie folgt zu verknüpfen:

#include "mylib/mylib.h"

und

#include <mylib/mylib.h>

Beides führt jedoch zu Datei nicht gefundenen Fehlern.

Ist das möglich? Und wenn ja, wie füge ich sie in die Hauptdatei zum Erstellen ein? Am besten in eigenen Unterverzeichnissen.

Ich hatte das gleiche Problem. Gelöst für Arduino IDE > 1.8. Scheint laut Referenz (siehe unterer Link) eine Spezialität in neueren IDEs (?) Zu sein.

Sie müssen ein „src“-Unterverzeichnis hinzufügen, bevor Sie einen Bibliotheksordner erstellen. Im Wesentlichen sollte Ihr Projekt also so aussehen:

/SketchDir (with *.ino file)  
/SketchDir/src  
/SketchDir/src/yourLib (with .h and .cpp file)  

und schließlich verweisen Sie in Ihrer Skizze auf:

#include "src/yourLib/yourLib.h"  

Andernfalls erhalte ich in meinem Fall – wenn mir der Ordner “src” fehlt – die Fehlermeldung, dass die Datei yourLib.cpp nicht gefunden werden kann.

Hinweis: Ich verwende ein Windows-System, falls es sich unterscheidet, und tatsächlich VS-Code als Wrapper für Arduino IDE. Aber beide IDE kompilieren es mit dieser Struktur.

Verweise:
https://forum.arduino.cc/index.php?topic=445230.0

  • Funktioniert in 1.8.7.

    – Russel Keane

    8. Dezember 2018 um 15:29 Uhr

  • Hat jemand dieses Muster dazu gebracht, mit Bibliotheken zu arbeiten, die sich gegenseitig enthalten? ich benutze ESPAsyncWiFiManager für ESP32, und es hängt von einer anderen Bibliothek ab ESPAsyncWebServer. Es wird es nicht finden, und ich würde es vorziehen, die Codedateien von Drittanbietern nicht zu ändern.

    – amenthes

    30. Dezember 2018 um 22:55 Uhr

  • Für Bibliotheken, die andere Bibliotheken einschließen müssen, verwenden Sie einfach einen relativen Pfad im #include, wie “../ESPAsyncWebServer/ESPAsyncWebServer.h” oder ähnliches. Dies erfordert jedoch, dass Sie den Pfad in der ersten Bibliothek ändern.

    – MV.

    5. Februar 2021 um 2:29 Uhr

Für die Skizzen habe ich die "*.h" und "*.cpp" Bibliotheksdateien befinden sich tatsächlich im selben Ordner wie die Skizze, und ich nenne sie wie "someheader.h". Das ist mir auch aufgefallen, wenn ich reingehe sketch Menü u add file... dass die Datei nicht angezeigt wird, bis ich die Skizze schließe und erneut öffne.

  • Wenn Sie sie im selben Ordner haben, können Sie sie wie einschließen #include "libName.h". Aber es scheint, dass Sie die IDE neu laden müssen, bevor Sie den Code kompilieren können.

    – tbraun89

    16. April 2012 um 12:41 Uhr


  • @LeandroTupone das klingt falsch, aber anscheinend macht es das Ding.

    – Sitilge

    24. November 2018 um 18:22 Uhr

Benutzeravatar von Tom Swirly
Tom Wirbel

Ich stimme mit Ihnen ein; Dies ist eine unerträgliche Art, Software zu entwickeln: Es erfordert, dass sich jede Datei, die Sie benötigen, im selben Verzeichnis wie das Hauptprogramm befindet!

Um dies zu umgehen, verwende ich make eine Single zusammenstellen .h Datei von meiner .h und .cpp Quellen – Sie können dies in verwendet sehen dieses 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 ist sehr wählerisch in Bezug auf Dateiendungen – wenn Sie a .cpp oder .cc Datei in ihrem Verzeichnis verwendet sie automatisch in der Quelle, und Sie können nichts einschließen, was keine ist .cpp, .cc oder .h – Das ist also die einzige Möglichkeit, dies zu tun.

Einen ähnlichen Trick verwende ich auch, um JavaScript-Dateien zusammenzustellen hier.

Dies erfordert, dass Sie laufen make nachdem Sie Ihre Dateien bearbeitet haben, aber da ich sowieso einen externen Editor (Emacs) verwende, ist dies für mich kein Problem.

Leider ist die Arduino IDE schrecklich und zeigt keine Anzeichen einer Verbesserung. Es gibt kein echtes Build-System, daher können Sie nur Programme erstellen, die sich in einem einzigen Verzeichnis befinden.

Die einzige wirkliche Lösung besteht darin, ein Makefile zu schreiben, dann können Sie eine echte IDE verwenden. Ich hoffe, dass eines Tages jemand ein Arduino-Plugin für QtCreator schreiben wird.

Hier ist ein Beispiel-Makefile:

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

Benutzeravatar von sdaau
sdaau

Ich hatte gerade das gleiche Problem (ich mag es auch, den Code in sich geschlossen zu halten), also mache ich mir nur ein paar Notizen; sagen, ich habe eine MyPdeSketch.pde verwenden MyLibClass.cpp; dann habe ich es so organisiert

/path/to/skdir/MyPdeSketch/MyPdeSketch.pde
/path/to/skdir/MyPdeSketch/MyLibClass/MyLibClass.cpp
/path/to/skdir/MyPdeSketch/MyLibClass/MyLibClass.h

(Allgemein gesagt, /path/to/skdir/ hier ist äquivalent zu ~/sketchbook/)

Was für mich funktioniert hat, ist so etwas wie:

mkdir /path/to/arduino-0022/libraries/MyLibClass
ln -s /path/to/skdir/MyPdeSketch/MyLibClass/MyLibClass.* /path/to/arduino-0022/libraries/MyLibClass/

Nach Neustart der IDE, MyLibClass sollte unter „Sketch/Import Library“ angezeigt werden.

Beachten Sie, dass die einzige Möglichkeit, die ich bisher für eine Bibliotheksklassendatei sehen kann, um auf andere Bibliotheksdateien zu verweisen, darin besteht, sie relativ einzuschließen (vom „aktuellen Speicherort“), vorausgesetzt, sie befinden sich alle im selben Hauptverzeichnis arduino-0022/libraries Ordner (möglicherweise verwandte Stack Overflow-Frage: Ist es möglich, eine Bibliothek aus einer anderen Bibliothek mit der Arduino IDE einzubinden?).

Ansonsten sollte es auch möglich sein, die zu symbolisieren MyLibClass Verzeichnis direkt in arduino-0022/libraries (anstatt manuell ein Verzeichnis zu erstellen und die Dateien dann symbolisch zu verknüpfen). Aus dem gleichen Grund, symbolische Verknüpfung mit dem alternativen Speicherort ~/sketchbook/libraries könnte auch problematisch sein.

Schließlich könnte eine möglicherweise bessere Organisation sein:

/path/to/skdir/MyLibClass/MyLibClass.cpp
/path/to/skdir/MyLibClass/MyLibClass.h
/path/to/skdir/MyLibClass/MyPdeSketch/MyPdeSketch.pde

… was nach Symlinking zu librarieswürde zwingen MyPdeSketch unter den Beispielen für die zu zeigen MyLibClass Bibliothek in Arduino IDE (dies ist jedoch möglicherweise nicht anwendbar, wenn Sie mehrere Klassenordner in einem einzigen Verzeichnis enthalten möchten).

EDIT: oder verwende einfach a Makefile – das würde direkt mit funktionieren avr-gccunter Umgehung der Arduino IDE (in diesem Fall kann die Organisation der Skizzenbuchdatei etwas gelockert werden).

Benutzeravatar von M.Hefny
M.Hefny

Ich glaube, ich weiß, was du genau brauchst.

Sie haben einen Projektordner sagen MEINPROJ_FOLDER und Sie möchten a einschließen Bibliotheken Ordner, der weitere untergeordnete Ordner für Ihre benutzerdefinierten Bibliotheken enthält.

Sie müssen Folgendes tun: 1- Erstellen Sie Ordner wie folgt:

-MyProjFolder
-MyProjFolder/MyProjFolder        

und erstellen Sie dann eine Datei mit dem Ordnernamen in der Erweiterung .ino -MyProjFolder/MyProjFolder/MyProjFolder.ino

2- Ordner Bibliotheken erstellen: -MyProjFolder/libraries <<<<< Name ist keine Option sollte so aufgerufen werden.

3- Erstellen Sie dann Ihre eigenen Bibliotheken -MyProjFolder/libraries/lib1
-MyProjFolder/libraries/lib1/lib1.cpp -MyProjFolder/libraries/lib1/Beispiele <<<< das ist ein Ordner -MyProjFolder/libraries/lib1/examples/Beispiel 1

Wiederholen Sie Schritt 3 so oft Sie möchten

auch prüfen http://arduino.cc/en/Guide/Libraries

Ich habe es etwas anders gemacht. Hier ist mein Setup.

Visuell ist dies das Verzeichnis-Layout

~/Arduino/Testy_app/  <- sketch dir
                   /Testy_app.ino <- has a #include "foo.h"
                   /foo           <- a git repo
                   /foo/foo.h
                   /foo/foo.cpp

So baue ich:

~/Arduino/Testy_App/$ arduino-cli compile --library "/home/davis/Arduino/Testy_app/foo/" --fqbn arduino:samd:mkrwan1310  Testy_app

Wenn Sie ausführlicher sein und libs und src-Verzeichnisse angeben möchten, funktioniert dies auch

~/Arduino/Testy_app/  <- sketch dir
                   /Testy_app.ino <- has a #include "foo.h"
                   /lib           <- a git repo
                   /lib/foo/src/foo.h
                   /lib/foo/src/foo.cpp

und die Build-Methode ist:

~/Arduino/Testy_App/$ arduino-cli compile --library "/home/davis/Arduino/Testy_app/lib/foo/src" --fqbn arduino:samd:mkrwan1310  Testy_app

Eine weitere Anpassung muss vorgenommen werden, um Dateien aus den lib-Verzeichnissen in das Hauptverzeichnis aufzunehmen. Wenn Sie das tun müssen, ist dies die Problemumgehung:

~/Arduino/Testy_app/  <- sketch dir
                   /Testy_app.ino <- has a #include 
"foo.h"
                   /inc/Testy_app.h
                   /foo           <- a git repo
                   /foo/foo.h
                   /foo/foo.cpp   < has a "include testy_app.h"

Dann kompilieren Sie so

~/Arduino/Testy_App/$ arduino-cli compile \
--library "/home/davis/Arduino/Testy_app/inc" \ 
--library "/home/davis/Arduino/Testy_app/foo/src" \ 
--fqbn arduino:samd:mkrwan1310  Testy_app

1409240cookie-checkBewahren Sie alle Bibliotheken im Arduino-Sketch-Verzeichnis auf

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy