Das 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
, erhalte ich folgende Fehlermeldung:
:makefile:4: *** missing separator. Stop.
Wie kann ich es reparieren?
Antworten:
makefile hat eine sehr dumme Beziehung zu Tabs, alle Aktionen jeder Regel werden durch Tabs identifiziert. Und nein, 4 Leerzeichen bilden keine Registerkarte, nur eine Registerkarte erstellt eine Registerkarte.
Zur Überprüfung benutze ich den Befehl
cat -e -t -v makefile_name
Es zeigt, dass das Vorhandensein von Registerkarten mit
^I
und Zeilenenden mit$
beiden von entscheidender Bedeutung sind, um sicherzustellen, dass Abhängigkeiten ordnungsgemäß enden, und Registerkarten markieren die Aktion für die Regeln, damit sie für das Dienstprogramm make leicht identifizierbar sind.Beispiel:
quelle
makefile
aus dem Tutorial ein, und es funktionierte nicht. Erst nach dem Löschen von Leerzeichen und dem Putten hat esTab
funktioniert!-v
Option fürcat
Befehl ist hier überflüssig, weil-e
Mittel-vE
und-t
Mittel-vT
.Klicken Sie in VS Code einfach auf "Leerzeichen: 4" in der rechten Ecke und ändern Sie es in die Registerkarte, wenn Sie Ihr Makefile bearbeiten.
quelle
Sie sollten den Befehl immer nach a schreiben Tab Leerzeichen und nicht Leerzeichen .
Dies gilt
gcc
in Ihrem Fall für Zeile (Zeile 4). Sie müssen vorher eine Registerkarte einfügengcc
.Ersetzen Sie auch
\rm -fr ll
durchrm -fr ll
. Fügen Sie vor diesem Befehl auch Registerkarten ein.quelle
Die Lösung für
PyCharm
wäre, einMakefile support
Plugin zu installieren :Preferences
(cmd + ,
)Plugins
->Marketplace
Makefile support
der IDE, installieren Sie sie und starten Sie sie neu.Dies sollte das Problem beheben und eine Syntax für ein Makefile bereitstellen.
quelle
Es ist eine ziemlich alte Frage, aber ich möchte noch etwas über eine weitere Option mit dem
vi/vim
Editor zur Visualisierung der Registerkarten sagen . Wenn Sievi/vim
installiert haben , öffnen Sie einMakefile
(zBvim Makefile
) und geben Sie ein:set list
. Dies zeigt die Anzahl der wie unten eingefügten Registerkarten an.quelle
Verwenden Sie
.editorconfig
, um die Registerkarten automatisch zu reparieren:quelle
Der entscheidende Punkt 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".
quelle
Wenn jemand von Ihnen ein Produkt von Intellij verwendet, ist die Lösung dafür folgende:
Other File Types
.Use tab character
und vorsichtig sein,Tab size
undIndent
Werte müssen 4 sein.quelle
Wenn Sie mcedit für die Makefile-Bearbeitung verwenden. Sie müssen die folgende Markierung sehen.
quelle
Dies liegt daran, dass die Registerkarte durch Leerzeichen ersetzt wird. Um diese Funktion zu deaktivieren, gehen Sie zu
gedit-> edit-> Einstellungen-> editor
und entfernen Sie die Prüfung auf
" Tab durch Leerzeichen ersetzen "
quelle