Ich gehe also fälschlicherweise davon aus, dass der Compiler auch in den
$PATH-Ordnern nach include-Dateien sucht?
Ich weiß nicht, ob das eine gute Idee war, aber ich hab meinen
/include/-Ordner in den Ordner kopiert, in dem der Compiler nach
includes sucht:
Zuvor wurde auch "osapi.h" nicht gefunden, die ist im eben kopierten
Ordner enthalten gewesen, nun wird aber "user_config.h" nicht gefunden
(siehe erste Codeblock). Bevor ich nun alles hin und her kopiere möchte
ich gerne wissen, wie ich das komfortabler lösen kann?
Grüße
Max M. schrieb:> Ich gehe also fälschlicherweise davon aus, dass der Compiler auch in den> $PATH-Ordnern nach include-Dateien sucht?
Richtig.
> Ich weiß nicht, ob das eine gute Idee war, aber ich hab meinen> /include/-Ordner in den Ordner kopiert, in dem der Compiler nach> includes sucht:
Ich aber: war es nicht.
> Zuvor wurde auch "osapi.h" nicht gefunden, die ist im eben kopierten> Ordner enthalten gewesen, nun wird aber "user_config.h" nicht gefunden> (siehe erste Codeblock). Bevor ich nun alles hin und her kopiere möchte> ich gerne wissen, wie ich das komfortabler lösen kann?
Option -I:
https://gcc.gnu.org/onlinedocs/gcc/Directory-Options.html
"osapi.h" wird nun von meinem include-Ordner geladen, "user_config.h"
befindet sich allerdings nicht im selben Ordner wie "osapi.h" sondern in
meinem ProjektOrdner - und wird deswegen wahrscheinlich auch nicht
gefunden. Obwohl ich der Meinung bin, dass der Parameter:
1
-I/user/
den Compiler auf die richtige Spur führen müsste - tut er aber nicht.
Wie behebt man dieses Problem?
Rufus Τ. F. schrieb:> Was machen die Leerzeichen nach dem -I? Das sieht merkwürdig aus.
Ich seh da nur ein einzelnes Leerzeichen, so wurde der Parameter auch
definiert?
Mag mir jemand die Kombination der zwei Makefiles erklären?
Das sind die Positionen der beiden Makefiles:
ProjektOrdner
--ProjektOrdner/Makefile
--ProjektOrdner/user/Makefile
und ich rufe das Makefile in ProjektOrdner/Makefile auf.
Ich hab den Paramter "-I ." hinzugefügt, jetzt scheinen alle
Headerdateien gefunden zu werden, allerdings existiert für den Compiler
der Ordner "user" auf einmal nicht mehr?
Edit:
Mir ist gerade aufgefallen, dass die Struktur bei Espressif wie folgt
ist:
ESP8266_NONOS_SDK
--ESP8266_NONOS_SDK/Makefile (<-- liegt bei mir in
ProjektOrdner/Makefile)
--ESP8266_NONOS_SDK/examples/simple_pair/Makefile (<-- liegt bei mir in
ProjektOrdner/user/Makefile)
D.h. das zweite Makefile befindet sich nicht eine Ebene tiefer (wie bei
mir) im Vergleich zum "Haupt" Makefile, sondern zwei Ebenen (der Ordner
examples enthält kein Makefile).
Ich hab nun die Struktur genauso wie in den Espressif-Beispielen:
Makefile
Projects
--ProjektOrdner
--ProjektOrdner/Makefile
--ProjektOrdner/user
--ProjektOrdner/user/user_main.c
--ProjektOrdner/user/user_config.h
Jetzt bekomm ich gar keine Ausgabe mehr:
Max M. schrieb:> Ich seh da nur ein einzelnes Leerzeichen, so wurde der Parameter auch> definiert?
Eben genau das Leerzeichen gehört da nicht hin.
(Ich verwendete den Plural, da -I zweimal auftaucht)
Keine einzige der anderen Optionen des gcc hat zwischen dem
Optionsnamen und dem Argument ein Leerzeichen, das sollte zu Denken
geben.
Rufus Τ. F. schrieb:> Keine einzige der anderen Optionen des gcc hat zwischen dem> Optionsnamen und dem Argument ein Leerzeichen, das sollte zu Denken> geben.
Ich will gar nicht gegen dich argumentieren, aber in den Makefiles von
espressif ist es auch mit Leerzeichen. Da das kompilieren inzwischen
halbwegs funktioniert, wage ich zu behaupten, dass die Leerzeichen nicht
stören? Falls ich hier falsch liege, bitte berichtigen.
Zwischenzeitlich ist mir aufgefallen, dass ich ein weiteres Makefile
vergessen habe (das direkt im /user/-Ordner). D.h. ich bin inzwischen
bei 3 geschachtelten Makefiles.
Ich bin wieder einen Schritt weiter:
schon gesucht, allerdings keine hilfreichen Ergebnisse gefunden. Weiß da
jemand was?
Edit:
Ich habs hinbekommen, ich weiß nicht, ob das im Sinne des Erfinders war,
aber es hat gereicht, einen Ordner bin anzulegen und die drei Ordner
ld, lib, tools aus dem sdk-Ordner in den ProjektOrdner zu
kopieren. Anscheinend erwartet das Makefile, dass diese Dateien und
Ordner vorhanden sind: