Ich verwende GNU Make und in einem Makefile, das ich habe, sehe ich die folgende Regel. Ich möchte eine ähnliche Regel mit einem Rezept hinzufügen, aber wenn ich eine Regel und ihr Rezept in der nächsten Zeile hinzufüge, indem ich einen Tabulator oder ein Leerzeichen für das Rezept eingebe, erhalte ich einen Make-Fehler.
dummy :
@echo $(OBJS)
Wenn ich den Vim-Befehl :set list aktiviere, sehe ich:
dummy :$
^I@echo $(OBJS)$
Was genau sind die Zeichen vor der Rezeptzeile (zweite Zeile), die diese vom Zeilenanfang einrücken?
Wie gebe ich sie über die Tastatur ein (ohne die vorhandene Regel kopieren, einfügen und dann ändern zu müssen)?
Wo finde ich Informationen zu den verschiedenen Leerzeichen/Einrückungen, die beim manuellen Erstellen eines Makefiles von Anfang an verwendet werden können (kein mit Automake oder einem anderen Tool erstelltes Makefile)?
Antwort1
Rezepte in einem Makefilemussmuss ein einzelnes Standardzeichen vorangestellt sein tab
, sonst nichts.
^I
ist die Darstellung des Tabulatorzeichens (siehe Tabelle auf der WikipediaASCIISeite), und daher sollte dies richtig sein.
TabSie sollten es also mit oder Ctrl+ eingeben können I.
(vorausgesetzt, diese werden von der Software nicht neu zugeordnet.)
Bearbeiten
Bei näherer Untersuchung sieht es so aus, als ob Siedürfenändern Sie das Zeichen, das allen Rezeptzeilen einer Registerkarte vorangestellt werden muss, indem Sie.RECIPEPREFIX
spezielle Variable.
Wenn dieser Wert in Ihrem Makefile definiert wurde, alle Rezeptenachdie Definition muss dieses Zeichen anstelle eines Tabulators verwenden.
Antwort2
Nachdem ich einige Hinweise aus der Antwort von DMA57361 oben herausgesucht und noch ein bisschen herumprobiert hatte, bemerkte ich, dass ich vor langer Zeit in meiner .vimrc diesen Befehl hatte set expandtab
(er erweitert Tabs in Leerzeichen) und ich verwende vim.
Dadurch wurde das Tabulatorzeichen beschädigt, das ich in meine Makefile-Regeln eingegeben habe. Das Kommentieren dieser Zeile in .vimrc hat geholfen und funktioniert bei mir.
Antwort3
Im Lichte der akzeptierten Antwort: Rezepten muss ein tab
Zeichen vorangestellt werden, das automatisch ersetzt wird, wenn set expandtab
in Ihrer aktiviert ist .vimrc
. Das Überschreiben Ihrer .RECIPEPREFIX
wird nicht empfohlen, da dies Makefiles in den von Ihnen heruntergeladenen Codebasen beschädigt. Der naive Ansatz besteht darin, einfach aus Ihrer Konfiguration zu entfernen set expandtab
, aber Sie können dies umgehen, indem Sie die Zeile hinzufügen
autocmd FileType make set tabstop=8 shiftwidth=8 softtabstop=0 noexpandtab
.
Dies wird expandtab
nur deaktiviert, wenn Sie ein Makefile bearbeiten.