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?
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 !!
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
Klicken Sie unter "VS Code" einfach auf "Space: 4" in der rechten Ecke und ändern Sie ihn beim Bearbeiten Ihres Makefiles in "Tab".
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$
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"
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 "
Die Lösung für PyCharm
wäre die Installation eines Makefile support
-Plugins:
Preferences
öffnen (cmd + ,
)Plugins
-> Marketplace
Makefile support
, installieren Sie die IDE und starten Sie sie neu.Dies sollte das Problem beheben und eine Syntax für ein Makefile bereitstellen.
Wenn einer von Ihnen ein Produkt von Intellij verwendet, ist dies die Lösung:
Other File Types
auswählen.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