Makefile ist normalerweise sehr wählerisch in Bezug auf Leerzeichen und Tabulatoren
– CS Pei
21. September 2013 um 18:56 Uhr
Lade die Datei besser irgendwo gezippt hoch.
– nicht werfen
21. September 2013 um 18:58 Uhr
Sie haben führende Leerzeichen anstelle von Tabulatoren.
– devnull
21. September 2013 um 18:59 Uhr
Filipe Gonçalves
Es ist ein Tab-Problem. Einige Texteditoren können Tabulatoren durch Leerzeichen ersetzen, stellen Sie sicher, dass Sie einen geeigneten Texteditor verwenden, der es nicht durcheinander bringt. Öffnen Sie Ihr Makefile in vi oder einem anderen rudimentären Editor und schreiben Sie dieses Makefile neu.
Beachten Sie, dass nach jeder Zielregel eine einzige Registerkarte muss am Zeilenanfang stehen. Alles, was nach diesem Tabulator kommt, wird an die Shell weitergegeben (es kann mehr Tabulatoren, Leerzeichen und was auch immer Sie wollen, aber denken Sie daran, dass am Anfang der Zeile ein Tabulator stehen muss).
Ich verwende den Standard-Texteditor auf dem Mac. Empfehlen Sie einen anderen?
– João Miranda
21. September 2013 um 19:04 Uhr
Nur das stimmt nicht eine einzige Registerkarte ist erlaubt. Als Regel gilt, dass das erste Zeichen in der Zeile ein TAB-Zeichen sein muss. Danach können Sie für den Rest der Zeile tun, was Sie wollen (mehr Tabulatoren, Leerzeichen, was auch immer). Was auch immer vorhanden ist, wird zur Ausführung an die Shell übergeben.
– Verrückter Wissenschaftler
21. September 2013 um 19:22 Uhr
@JoãoMiranda Ich weiß es nicht, war noch nie auf einem Mac, aber ich bin mir sicher, dass es andere Möglichkeiten gibt
– Filipe Gonçalves
21. September 2013 um 19:30 Uhr
@MadScientist du hast recht, ich habe meine Antwort bearbeitet, um etwas klarer zu sein. Vielen Dank.
– Filipe Gonçalves
21. September 2013 um 19:31 Uhr
Ich bin bei der Verwendung auf den Fehler “fehlendes Trennzeichen” gestoßen Bedingungen in make. Es scheint, dass Sie den Fehler erhalten würden, wenn Sie vergessen, ein Leerzeichen zwischen einzufügen ifeq und die ( damit es aussieht ifeq ( und nicht mögen ifeq(. Hope make war diesbezüglich etwas klarer!
– kartisch
11. Februar 2019 um 6:59 Uhr
kannst du versuchen zu laufen –
perl -pi -e 's/^ */\t/' Makefile
(Natürlich nach dem Speichern eines Backups)
Haben Sie das Makefile in einem Editor geöffnet/gespeichert, bevor Sie es erneut ausführen?
– Leeor
21. September 2013 um 20:05 Uhr
Beste Antwort – und ja, vermeiden Sie es, die Datei nach diesem Perl-Befehl mit dem Editor zu berühren, bevor Sie make ausführen
– Scott Stensland
18. März 2016 um 17:27 Uhr
Wenn Sie einfach das obige ausführen, wurde das Problem behoben. Die IDE, die ich verwende, ist IntelliJ. Vielen Dank
– Vinujan.S
2. Juni 2019 um 5:52 Uhr
yeah, Lebensretter gibt es auf dem Perl! hat bei mir auch funktioniert!
– Ryan Anderson
12. Oktober 2021 um 0:36 Uhr
Es kann auch an einem fehlenden Doppelpunkt zwischen .PHONY und Ihren Zielen liegen
.PHONY all
all:
<tab><do this>
löst einen Fehler aus, während unten gut funktioniert
.PHONY: all
all:
<tab><do this>
make ist sehr empfindlich in Bezug auf die Art und Weise, wie Regeln und Ziele eingerückt werden. Der von Ihnen gepostete Fehler wird normalerweise durch das Einrücken der Regel eines Ziels mit Leerzeichen anstelle eines einzelnen Tabulators verursacht.
zum Beispiel:
target:
do stuff
wird Fehler, aber
target:
<tab>do stuff
wird nicht.
Eigentlich hatte ich ein ähnliches Problem, alles war richtig, aber später verstand ich, dass ich g-edit benutze und der Lösung sage: Bearbeiten> Einstellungen> Editor-Registerkarte> Deaktivieren Sie die Schaltfläche (Leerzeichen anstelle von Tabulatoren einfügen) und es hat gut funktioniert
BrainSlugs83
Sie verwenden wahrscheinlich einen modernen Texteditor, der den Unicode-Standard versteht. — Selbst wenn Sie eine ANSI-Datei in diesen Editoren öffnen, speichern sie sie normalerweise wieder als UTF-8 – was sehr abwärtskompatibel ist, außer dass es zwei “unsichtbare” Bytes am Anfang der Datei platziert, also dass andere Programme wissen, in welchem Format der Text kodiert ist. — Deshalb wird der “Fehler” in Zeile 1 gemeldet.
Wenn Sie Notepad für Windows verwenden, haben Sie Glück, da es eine Option gibt, dieses Verhalten zu überschreiben und die Datei im „ANSI“-Format zu speichern. Hier ist wie:
Datei -> Speichern unter
Ändern Sie “Dateityp” auf “Alle Dateien”.
Finden Sie den genauen Speicherort des Makefiles (speichern Sie manchmal in einem anderen Verzeichnis, ich weiß nicht, warum das passiert ist, aber es ist mir immer wieder passiert).
Ändern Sie den Dateinamen von „Makefile“ in „Makefile“. — der abschließende Punkt ist wichtig (ohne ihn wird er als “Makefile.txt” gespeichert, auch wenn “Alle Dateien” ausgewählt ist).
Ändern Sie die „Codierung“ von „UTF-8“ auf „ANSI“.
Jeffersonschwein
Ich habe gerade das gleiche Problem, wenn ich meinen Quellcode mit automatisch generiertem gcc-Makefile kompiliere.
Ich fand schließlich heraus, dass es durch die utf-8 BOM-Zeichen am Anfang des Makefiles verursacht wurde. Diese Zeichen sind in einigen Texteditoren unsichtbar.
Versuchen Sie also, die Datei als utf-8 ohne BOM zu speichern.
und wie siehst du diese unsichtbaren zeichen?
– KansaiRobot
6. Juli 2021 um 9:39 Uhr
vscode hat ein Update erhalten, mit dem Benutzer diese unsichtbaren Zeichen sehen können
vielleicht das Leerzeichen nach Libs_Defines.o ?
– Leeor
21. September 2013 um 18:55 Uhr
Was ist mit Zeilenenden?
– nicht werfen
21. September 2013 um 18:56 Uhr
Makefile ist normalerweise sehr wählerisch in Bezug auf Leerzeichen und Tabulatoren
– CS Pei
21. September 2013 um 18:56 Uhr
Lade die Datei besser irgendwo gezippt hoch.
– nicht werfen
21. September 2013 um 18:58 Uhr
Sie haben führende Leerzeichen anstelle von Tabulatoren.
– devnull
21. September 2013 um 18:59 Uhr