Unix-makefile-Fehler " 'ake: Schwerwiegender Fehler: nicht zu wissen, wie zu machen (c-Datei hier)"
Habe ich geschrieben das unter makefile:
hw2p1: hw2p1_main.o hw2p1_getit.o hw2p1_parseit.o hw2p1_moveit.o hw2p1_showit.o
gcc hw2p1_main.o hw2p1_getit.o hw2p1_parseit.o hw2p1_moveit.o hw2p1_showit.o
hw2p1_main.o: hw2p1_main.c
gcc -c hw2p1_main.c
hw2p1_getit.o: hw2p1_getit.c
gcc -c hw2p1_getit.c
hw2p1_parseit.o: hw2p1_parseit.c
gcc -c hw2p1_parseit.c
hw2p1_moveit.o: hw2p1_moveit.c
gcc -c hw2p1_moveit.c
hw2p1_showit.o: hw2p1_showit.c
gcc -c hw2p1_showit.c
Als ich das erste mal versucht, anzurufen, zu machen, bekam ich die Fehlermeldung: "make: Fatal error: unexpected end of line seen", ich Lösch die Leerzeilen zwischen den Zielen und rief wieder machen, aber dieses mal habe ich " 'ake: Schwerwiegender Fehler: nicht zu wissen, wie zu machen hw2p1_main.c"
Ich zusammengestellt habe alle diese Dateien einzeln und dann mit Ihnen, damit ich weiß, dass der Fehler ein Resultat einer falschen makefile und nicht die Folge von Fehlern in meine c-Dateien.
Dies ist das erste makefile, die ich jemals geschrieben habe, also ich könnte nur sein, es zu tun völlig falsch. So oder so, irgendwelche Vorschläge auf, wie, um loszuwerden, diese Fehler?
- Also öffnete ich meine Datei und zeigt alle whitespace und Zeilenenden. Es stellte sich heraus, der editor war ich mit der es so es gab Wagenrückläufe und Zeilenvorschübe am Ende jeder Zeile. Aus irgendeinem Grund gibt die Beförderung verhindert die Ziele werden richtig gefunden. Wenn ich schrieb das Programm im unix-terminal, es stellt sich heraus, dass nur line-feeds vorhanden waren. Diese Datei hat tatsächlich funktioniert, so nach all dieser Zeit, problem gelöst.
- Lesen, die Datei mad, ich glaube, bop it..
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies kann passieren, wenn das Verzeichnis versehentlich nicht die, die es werden sollten, so wie es aussieht
hw2p1_main.c
's Abwesenheit Anrufe für eine Regel zu erstellen, die C-Quellcode-Datei.Könnte es auch sein, einen Dateinamen falsch geschrieben.
hw2p1
, das sollte nicht das problem sein, aber ist es Wert Festsetzung.Scheinen Sie zu fehlen, the-o in der Verknüpfung Befehl, aber das ist wahrscheinlich nicht das, was ist auf Ihrem Verstand noch. Die sofortige Beschwerde ist, dass die stellen nicht finden können, dass .c-Datei. Sicher ist es dort in das aktuelle Arbeits-Verzeichnis?
Als start, versuchen, ein makefile, das nur kompiliert eine Sache:
Stellen Sie außerdem sicher, dass die 2. Zeile verwendet ein TAB-Zeichen statt Leerzeichen. (Ich habe manuell einstellen, dies ist in meinen editor, weil Räume sind der einzige intelligente Weg, es zu tun 🙂
make
, der ausgeführt wird, die erste Zeile des Makefiles, oder wollen Sie sagenmake hw2p1_moveit.o
- nicht ".c" Auch - und das war ein Fehler in meinem Beitrag - Sie wollen sagen "gcc -o hw2p1_moveit.o". Diese gibt den Namen der Ausgabedatei.Ihrem Makefile ist viel komplizierter, als es sein muss. Lassen Machen Verwendung seiner impliziten Regeln. Sie weiß, wie make foo.o aus foo.c, und Sie brauchen nicht zu sagen, dass es. Ihre gesamte Makefile kann reduziert werden zu:
Wie bereits von anderen-stellen Sie sicher verwenden Sie einen aktuellen Tabs für die Einrückung. Machen ist sehr wählerisch über, die.
Nur ein Stich in der Dunkelheit, aber nicht mit der groß-und Kleinschreibung? Das kommt von einem windows/apple-Welt, einige Leute sind überrascht, dass unix-Dateinamen sind case-Sensitiv.
Können Sie dies überprüfen, indem Sie kopieren die Dateinamen genau aus dem error-Ausgang und versucht, die Liste, d.h.
ls -l <paste>
. Das sollte dir auch zeigen, ob es gibt einige steuerzeichen eingebettet in den Dateinamen, das könnte auch das problem sein.Diese Antwort ist fast nie verfügbar! Okay, also im Grunde fand ich eine Lösung. Die makefile, die Sie geschrieben haben, ist sound. Jedoch, Sie müssen es schaffen, in EMACS. Wierd richtig? Ich hatte eine Vorlage durch und hatte geschrieben das mein makefile im Editor hochgeladen und es auf den Uni-server, und es nie ran! Ich habe versucht, mit verschiedenen Varianten der code kein Glück. Dann in frustration, die ich ein zweites mal eingegeben, das ganze in EMACS, und es funktionierte einfach. Keine änderungen am code. Give it a shot!
Wenn Sie sich vergewissert haben
1), Dass alle Dateien, die es sagt, fehlt die im gleichen Verzeichnis wie das makefile oder sonst wie pro Pfad angegeben
2) den Befehl alle Zeilen mit tabs und nicht mit Leerzeichen (einfachste Möglichkeit zu überprüfen ist, drücken Sie eine Pfeil-Links-Taste bei der ersten Buchstaben und es sollte die Rückkehr zur home-position (0. char line position)
Dann die Meisten der Zeit, das problem ist das Dateiformat von Makefile
Wenn Sie die Eingabe einer Datei in einem editor mit einem PC (CR/LF) Line-format, dann haben Sie, um die Einstellung nur CR Dateiformat.
So, geben Sie das Makefile in vi oder emacs oder einem anderen editor die Standard-Datei-format von UNIX-und es wird funktionieren, oder festlegen, dass Ihr Dokument-Datei-format von UNIX-geben Sie in Ihrem editor, wenn es erlaubt das setzen einer.
Diese arbeiten müssen für alle Fehler vom Typ
'ake: Fatal error: Don' T know how to make target
(OR) <BR/>
(lastfilename in line)'ake: Fatal error: Don't know how to make target
Hoffe, das hilft.