Ich bin neu in der Arduino / C-Entwicklung (aus einer JavaScript / Ruby-Umgebung), habe mich aber gefragt, ob es möglich ist, eine Bibliothek aus einem benutzerdefinierten Ordner in eine Skizze aufzunehmen.
Das ist also meine Situation;
project.ino
libs/
MyNewLib/
MyNewLib.h
MyNewLib.ccp
Jetzt lautet meine Frage: Wie kann ich meine benutzerdefinierte Bibliothek einbinden? Ich habe verschiedene Variationen davon ausprobiert.
# project.ino
#include <libs/MyNewLib/MyNewLib.h>
#include "libs/MyNewLib/MyNewLib.h"
#include <./libs/MyNewLib/MyNewLib.h>
#include "./libs/MyNewLib/MyNewLib.h"
Aber keiner von ihnen funktioniert. Kann mir jemand sagen, ob das möglich ist? Ich habe mir diese Frage im Internet angesehen, kann aber keine befriedigende Antwort finden. Hoffentlich könnt ihr helfen.
Prost.
AKTUALISIEREN
Ich bin mir bewusst, dass Sie Ihre Bibliotheken in Ihrem globalen Bibliotheksordner ablegen können, aber ich möchte, dass sie in meinem lokalen Projektordner abgelegt werden. Ich möchte sie mit meinem Team teilen.
quelle
include
indem Sie den Pfad / to / library / angeben, nach dem Sie wahrscheinlich fragen.Antworten:
Okay, hier ist, wie es funktioniert, und ich habe es überprüft, um sicherzugehen.
Sicher können Sie harte Pfade verwenden, aber jeder Programmierer hasst es , harte Pfade zu verwenden. Sie sind überhaupt nicht portierbar und sperren Ihr Programm. Sie verwenden weiche oder harte Links zu den Dateien im Projekt (schlagen Sie in den Manpages unter "ln" nach). Aber ... rede über hässlich! Die Frage ist also, wie man es "richtig" macht? Der Schlüssel ist zu lernen, mit welchen Parametern und in welchem Pfad der C / C ++ - Compiler ausgeführt wird.
Sie werden feststellen, dass die Schlussfolgerung überhaupt NICHT intuitiv ist. Auf den Punkt gebracht: Relative Pfade funktionieren nicht richtig. Jetzt, warum?
Aber lassen Sie mich zunächst erklären, warum jeder Programmdateien außerhalb des Projektverzeichnisses ablegen möchte . Programmierer mögen es, Programmklassen, Strukturen, Methoden, Funktionen, Makros usw. einmal zu schreiben. Sobald der Programmierer das Programmfragment verfestigt, möchte er die Dateien in einem gemeinsamen Baum ablegen und weitermachen. Jedes Programm danach könnte diese private Bibliothek benutzen. Wenn Sie die Dateien an einem zentralen Ort haben, werden Sie nicht mehrere Kopien und Versionen von jeder haben. Eine private Bibliothek für viele private Programme.
Ab 1.6.13 (Teensy unterstützt 1.8. * Noch nicht) enthält relative Includes Start aus der Bibliothek , nicht aus Ihrem Verzeichnis. Es scheint, dass der Ano-zu-C-Filter (denken Sie daran, dass Arduino eine "Konvertierung" des Ziels durchführt und dann den C / C ++ - Compiler aufruft) dort beginnt, wo Sie Ihren Arduino-Baum installiert haben. In meinem Fall habe ich in "~ / bin / arduino" installiert. Teensys Zuhause ist "./hardware/teensy". Der gesamte Home-Pfad für die Bibliotheken lautet "~ / bin / arduino / hardware / teensy / avr / libraries". Dort finden Sie alle Support-Programmbäume.
In einer Quelldatei wählt die Anweisung '#include "test.hpp"' die Datei korrekt aus Ihrem aktuellen Verzeichnis aus. Wenn Sie jedoch "#include" ../test.hpp "verwenden, beginnt der Include-Pfad nicht in Ihrem Projektverzeichnis. Stattdessen startet es in "./libraries"! Der resultierende Pfad lautet also:
#include "../test.hpp" ==> ./arduino/hardware/teensy/avr/libraries/test.hpp
Zusammenfassend lässt sich sagen, dass es keinen sauberen Weg gibt, einen eigenen Werkzeugbaum in einem nahe gelegenen Verzeichnis zu erstellen. Der einzige Kurs besteht darin, Ihre Arbeit in der Arduino-Bibliothek zu verrichten und diese Regeln ebenfalls zu kennen.
quelle
Ich bin nach einiger Zeit wieder mit dem Arduino beschäftigt und bin etwas verwirrt über ähnliche Probleme und verwirrt über verschiedene Informationen von verschiedenen Seiten und für verschiedene Versionen der Idee.
Was ich gefunden habe ist, dass, wenn Sie eine Skizze in einem Verzeichnis haben, dann das Ide herunterfahren können Sie .h, .cpp ... -Dateien in dem Verzeichnis ablegen und das Ide, wenn es neu gestartet wird, wird sie mit der Skizze öffnen.
Fügen Sie sie ein, indem Sie einfache Anführungszeichen für die Dateinamen, keinen Pfad und keine spitzen Klammern verwenden.
Ich bin sicher, dass dies nur ein Teil der vollständigen Antwort ist, aber es hat mich dazu gebracht, anzufangen.
quelle
Soweit mir bekannt ist, können Sie Ihre Bibliotheken von einem benutzerdefinierten Speicherort aus einbinden, indem Sie ihren absoluten Pfad verwenden.
Da absolute Pfade aus Sicht der Code-Portabilität langweilig sein können, können Sie einige Makros definieren, um den absoluten Pfad von einem bestimmten relativen Pfad abzurufen. Auf diese Weise müssten Sie lediglich den 'Projektstamm'-Pfad festlegen, wenn Sie von einem Gerät auf ein anderes übertragen.
Definieren Sie den Stammordner Ihres Projekts:
Definieren Sie eine relativ zu absoluten Makro "Transformation":
Fügen Sie Ihre Dateien über den relativen Pfad ein:
Ich hoffe es wird nützlich sein.
quelle
Das Arduino-Plugin für Visual Studio unterstützt lokale Bibliotheken. Sie finden das Plugin hier
quelle
Ich habe kürzlich diese lokale Bibliotheksstruktur getestet. Es funktioniert mit:
Die Arduino IDE 1.6.7 Build-Vorverarbeitung übernimmt sogar den Quellcode für die Bibliothek.
Prost!
quelle
Am einfachsten ist es, die Bibliotheken in Ihrem lokalen Skizzenverzeichnis zu speichern und eine symbolische Verknüpfung im Verzeichnis [HOME] / Arduino / libraries zu erstellen. Dann können Sie sie einfach mit Ihrer Skizze / Ihrem Projekt in Git einchecken und Arduino ist immer noch glücklich, da die Bibliotheken im globalen Ordner verfügbar sind.
Vielleicht erstellen Sie sogar ein Installationsskript, das diese Links automatisch erstellt und das auch in Git eincheckt.
quelle
Eine weitere wirklich schlechte Lösung: Erstellen Sie eine Datei mit dem Namen
libraries.cpp
:Dies funktioniert natürlich nur, wenn die Bibliothek selbst keine Includes enthält ...
quelle