Makefile:1: *** fehlendes Trennzeichen. Halt

Lesezeit: 5 Minuten

Benutzeravatar von João Miranda
João Miranda

Ich erstelle ein Projekt auf c und wenn ich mein Makefile erstelle und versuche, es auszuführen, erhalte ich diesen Fehler:

Makefile:1: *** missing separator.  Stop.

Mein Makefile-Code lautet:

CC=gcc
OBJ=./objetos
INC=./include
FON=./aqsFonte
BIB=./bibliotecas
OPBIB=-lBiblioteca
ProjetoFinal: libFinal.a
    $(CP) $(FON)/ProjetoFinal.c -I$(INC) -L$(BIB) $(OPBIB) -o ProjetoFinal

Bibliotecas.a: Caminho.o Libs_Defines.o Matrizes.o Proc_Imagens.o Vetores.o
    ar -q $(BIB)/libFinal.a Caminho.o ibs_Defines.o Matrizes.o Proc_Imagens.o Vetores.o

Caminho.o:
    $(CP) $(FON)/Caminho.c -o Caminho.o
Libs_Defines.o :
    $(CP) $(FON)/Libs_Defines.c -o Libs_Defines.o
Matrizes.o:
    $(CP) $(FON)/Matrizes.c -o Matrizes.o
Proc_Imagens.o:
    $(CP) $(FON)/Proc_Imagens.c -o Proc_Imagens.o
Vetores.o:
    $(CP) $(FON)/Vetores.c -o Vetores.o

Außerdem ist es alles richtig tabbed ich denke.

  • 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

Benutzeravatar von Filipe Gonçalves
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

Benutzeravatar von BrainSlugs83
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:

  1. Datei -> Speichern unter
  2. Ändern Sie “Dateityp” auf “Alle Dateien”.
  3. 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).
  4. Ä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).
  5. Ändern Sie die „Codierung“ von „UTF-8“ auf „ANSI“.

    Sparen Sie mit ANSI-Kodierung

Benutzeravatar von jeffersonpig
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

    – Akki

    17. April um 7:53

1395660cookie-checkMakefile:1: *** fehlendes Trennzeichen. Halt

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy