it-swarm.com.de

makefile: 4: *** Trennzeichen fehlt. Halt

Das ist mein Makefile:

all:ll

ll:ll.c   
  gcc  -c  -Wall -Werror -02 c.c ll.c  -o  ll  [email protected]  $<

clean :
  \rm -fr ll

Wenn ich make clean oder make make versuche, erhalte ich diese Fehlermeldung

:makefile:4: *** missing separator.  Stop.

Wie kann ich es reparieren?

302
Rahul Reddy

makefile hat eine sehr dumme Beziehung zu Registerkarten, alle Aktionen jeder Regel werden durch Registerkarten identifiziert ...... und die Leerzeichen Nr. 4 bilden keine Registerkarten, nur ein Tabulator bildet eine Registerkarte ...

zu überprüfen verwende ich den Befehl cat -e -t -v makefile_name

Es zeigt das Vorhandensein von Registerkarten mit ^I und Zeilenenden mit $ an. Beide sind wichtig, um sicherzustellen, dass Abhängigkeiten ordnungsgemäß enden, und Registerkarten markieren die Aktion für die Regeln, so dass sie für das Dienstprogramm make leicht erkennbar sind.

Beispiel:

Kaizen ~/so_test $ cat -e -t -v  mk.t
all:ll$      ## here the $ is end of line ...                   
$
ll:ll.c   $
^Igcc  -c  -Wall -Werror -02 c.c ll.c  -o  ll  [email protected]  $<$ 
## the ^I above means a tab was there before the action part, so this line is ok .
 $
clean :$
   \rm -fr ll$
## see here there is no ^I which means , tab is not present .... 
## in this case you need to open the file again and edit/ensure a tab 
## starts the action part

hoffe das hilft !!

642
nsd

Sie sollten den Befehl immer nach einem "Tab" schreiben und nicht nach Leerzeichen.

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

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

22
Denny Mathew

Klicken Sie unter "VS Code" einfach auf "Space: 4" in der rechten Ecke und ändern Sie ihn beim Bearbeiten Ihres Makefiles in "Tab".

20
alanwsx

Es ist eine ziemlich alte Frage, aber trotzdem möchte ich noch eine Option mit vi/vim-Editor zur Visualisierung der Registerkarten sagen. Wenn Sie vi/vim installiert haben, öffnen Sie eine Makefile (z. B. vim Makefile) und geben Sie :set list ein. Daraufhin wird die Anzahl der Registerkarten angezeigt,

 %-linux: force$
^[email protected] [ "$(GCC_VERSION)" = "2.96" ] ; then \$
^I^Iecho ===== Generating build tree for legacy [email protected] architecture =====; \$
^I^I$(CONFIGURE) $(CWD) [email protected] legacy; \$
^Ielse \$
^I^Iecho ===== Generating build tree for [email protected] architecture =====; \$
^I^I$(CONFIGURE) $(CWD) [email protected]; \$
^Ifi$
^Icd [email protected];make$
5
Panch

Der Schlüsselpunkt war "HARD TAB" 1. Überprüfen Sie, ob Sie TAB anstelle von Leerzeichen verwendet haben 2. Überprüfen Sie Ihre .vimrc auf "set tabstop = X" 

4
wlsherica

Dies ist darauf zurückzuführen, dass der Tabulator durch Leerzeichen ersetzt wird ..__ 

gedit-> edit-> preferences-> editor

und entfernen Sie das Kontrollkästchen für 

" Tab mit Leerzeichen ersetzen

2

Die Lösung für PyCharm wäre die Installation eines Makefile support-Plugins:

  1. Preferences öffnen (cmd + ,)
  2. Gehe zu Plugins -> Marketplace
  3. Suchen Sie nach Makefile support, installieren Sie die IDE und starten Sie sie neu.

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

2

Wenn Sie Mcedit für die Bearbeitung von Makefiles verwenden. Sie müssen die folgende Markierung sehen .  enter image description here

1
riguang zheng

Wenn einer von Ihnen ein Produkt von Intellij verwendet, ist dies die Lösung:

  1. Gehen Sie zu Voreinstellungen> Editor> Code-Stil 
  2. hier müssen Sie den Dateityp auswählen, der zu Ihrem Problem gehört. Wahrscheinlich müssen Sie jedoch Other File Types auswählen.
  3. Markieren Sie in der geöffneten Registerkarte das Kontrollkästchen für Use tab character und achten Sie darauf, dass Tab size und Indent Werte 4 sein müssen.

Verwenden Sie .editorconfig , um die Registerkarten automatisch zu fixieren:

root = true

[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
indent_style = space
indent_size = 4

[Makefile]
indent_style = tab
0
DanFromGermany