Makefile bringt Fehlermeldung. Warum?
-
Hallo ihr Lieben,
ich habe eine Makefile geschrieben, bei der der Compiler nicht mitmacht. Und auch bei Genauerem Hinsehen verstehe ich nicht, warum das so ist. Was habe ich falsch gemacht? Die Dateien sind so weit richtig, aber...Human : main.o Human.o Creature.o g++ -o Human main.o Human.o Creature.o main.o : main.cpp g++ -c main.cpp Human.o : Human.hpp g++ -c Human.hpp Creature.o : Creature.hpp g++ -c Creature.hpp .Phony: clean clean: -rm *.o
Die Fehlermeldung die ich erhalte ist:
clang: error: no such file or directory: 'Human.o' clang: error: no such file or directory: 'Creature.o'
Wieso erstellt er die Object-Dateien nicht?
Vielen Dank für jeden Hinweis.Liebe Grüße
Hawaiihemd
-
Das Makefile und die fehlerausgaben passen nicht zusammen.
Im Makefile hast du g++ angegeben.
Aber in der Fehlermeldung steht clangAnsonsten hast du einen Fehler bezüglich Human/Creature
Vergleich das mal wie du es für main gemacht hast
-
@firefly Ja, dasit clang hat mich auch gewundert. Denn eigentlich nutze ich ja g++...
Du meinst wegen der Endung .hpp?
Ich habe keine cpp-Dateien erstellt, weil die Definitonen so kurz waren, dass ich das gleich in der hpp-Datei erledigt habe. Ich bilde mir ein das so auch schon mal gesehen zu haben.Ist genau das der Fehler?
Ich bim gerade unterwegs, werde das aber nachher mal ausprobieren.
-
@Hawaiihemd sagte in Makefile bringt Fehlermeldung. Warum?:
Ich habe keine cpp-Dateien erstellt, weil die Definitonen so kurz waren, dass ich das gleich in der hpp-Datei erledigt habe.
Und wie ist dann die Verbindung zur main.cpp?
Gibt es da #include der .hpp?
-
@DirkB genau.
-
Ich habe hier mal den Link zur online-die.
Dort klappt es einwandfrei. Es muss also tatsächlich an meiner Makefile liegen. Ich verstehe das nicht...Wie so oft: Das Programm ergibt keinen großen Sinn, ist nur Spielerei mit Vererbung...
-
Header-Dateien werden nicht extra kompiliert, da sie ja schon mit
#include
eingebunden sind.
Du gibst sie im Makefile nur als Abhängigkeit an (damit die Datei neu kompiliert wird, wenn sich eine der Headerdateien geändert hat):Human : main.o g++ -o Human main.o main.o : main.cpp Human.hpp Creature.hpp g++ -c main.cpp
PS: Auch dein Code kann noch verbessert (vereinheitlicht) werden.
-
@Hawaiihemd sagte in Makefile bringt Fehlermeldung. Warum?:
@DirkB genau.
Bei einem #include wird die angegebene Datei vom Preprozessor (der läuft noch vor dem Compiler) in den Quellcode eingebunden.
Wenn es eine .o von deinen .hpp geben würde, hätte der Linker Probleme mit doppelten Symbolen.
-
@Th69 Vielen Dank für den Hinweis.
Ich sauge Verbesserungsvorschläge auf wie ein Baby die Muttermilch - spart nicht mit Kritik und Verbesserungen
-
Ihr Lieben,
vielen Dank. Nun hat es einwandfrei funktioniert. Ihr seid einfach klasse!