817 Stimmen

Makefile:4: *** fehlender Trenner. Stop

Dies ist mein Makefile:

all:ll

ll:ll.c   
  gcc  -c  -Wall -Werror -02 c.c ll.c  -o  ll  $@  $<

clean :
  \rm -fr ll

Wenn ich versuche, make clean oder make make auszuführen, erhalte ich diesen Fehler:

:makefile:4: *** fehlender Trenner.  Stopp.

Wie kann ich das beheben?

1586voto

AppleBee12 Punkte 15350

Make definiert, dass ein Tabulator erforderlich ist, um jedes Rezept zu starten. Alle Aktionen jeder Regel werden durch Tabulatoren identifiziert. Wenn Sie Ihren Rezepten lieber ein anderes Zeichen als Tab voranstellen möchten, können Sie die Variable .RECIPEPREFIX auf ein alternatives Zeichen setzen.

Zur Überprüfung verwende ich den Befehl cat -e -t -v makefile_name.

Es zeigt das Vorhandensein von Tabulatoren mit ^I und Zeilenenden mit $. Beide sind entscheidend, um sicherzustellen, dass Abhängigkeiten ordnungsgemäß enden und Tabulatoren die Aktionen für die Regeln kennzeichnen, damit sie für das Make-Dienstprogramm leicht identifizierbar sind.

Beispiel:

Kaizen ~/so_test $ cat -e -t -v  mk.t
all:ll$      ## hier ist das $ Ende der Zeile ...                   
$
ll:ll.c   $
^Igcc  -c  -Wall -Werror -02 c.c ll.c  -o  ll  $@  $<$ 
## das ^I oben bedeutet, dass ein Tabulator vor dem Aktionsteil vorhanden war, also ist diese Zeile in Ordnung.
 $
clean :$
   \rm -fr ll$
## hier gibt es kein ^I, was bedeutet, dass kein Tabulator vorhanden ist .... 
## in diesem Fall müssen Sie die Datei erneut öffnen und einen Tabulator bearbeiten/sichern, 
## damit der Aktionsabschnitt beginnt

117voto

Alan Punkte 1324

Auf VS Code einfach auf das "Space: 4" in der unteren rechten Ecke klicken und beim Bearbeiten Ihrer Makefile in ein Tab umwandeln.

60voto

Denny Mathew Punkte 1072

Standardmäßig sollten Befehle immer nach einem Tabulator und nicht nach einem Leerzeichen geschrieben werden. Dies kann mit der Variable .RECIPEPREFIX auf ein anderes Zeichen geändert werden.

Dies gilt für die gcc-Zeile (Zeile #4) in Ihrem Fall. Sie müssen vor gcc einen Tabulator einfügen.

Ersetzen Sie auch \rm -fr ll durch rm -fr ll . Fügen Sie auch vor diesen Befehl Tabulatoren ein.

22voto

WeezyKrush Punkte 416

Zusammenfassung;

Die Makefile-Syntax kann eigenartig sein.
Wenn Sie möchten, dass eine Zeile Code als make Code interpretiert wird, muss sie nur mit Leerzeichen eingerückt sein.
Wenn Sie möchten, dass eine Zeile Code als bash Code interpretiert wird, muss sie nur mit Tabulatoren eingerückt sein.

sometask:
  ifeq ($FOO,bar)  // das ist Make-Code. Nur Leerzeichen
    echo "foobar"  // das ist Bash-Code. Nur Tabulatoren
  endif            // wieder Make-Code. Nur Leerzeichen

Technisch gesehen ist die führende Einrückung entscheidend für den Interpreter.

20voto

Tomasz Bartkowiak Punkte 8157

Die Lösung für PyCharm wäre, ein Makefile-Support-Plugin zu installieren:

  1. Öffnen Sie Einstellungen (cmd + ,)
  2. Gehen Sie zu Plugins -> Marktplatz
  3. Suchen Sie nach Makefile-Support, installieren Sie es und starten Sie die IDE neu.

Dies sollte das Problem beheben und eine Syntax für ein Makefile bereitstellen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X