Welches Zeichen wird zum Einrücken des Make-File-Regelrezepts verwendet?

Welches Zeichen wird zum Einrücken des Make-File-Regelrezepts verwendet?

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.

^Iist 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 tabZeichen vorangestellt werden, das automatisch ersetzt wird, wenn set expandtabin Ihrer aktiviert ist .vimrc. Das Überschreiben Ihrer .RECIPEPREFIXwird 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 expandtabnur deaktiviert, wenn Sie ein Makefile bearbeiten.

verwandte Informationen