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.