target: dependencies
command1
command2
Auf meinem System (Mac OS X) make
scheint es erforderlich zu sein, dass Makefiles vor dem Inhalt jeder command
Zeile ein Tabulatorzeichen haben , oder es wird ein Syntaxfehler ausgegeben.
Dies ist ärgerlich beim Erstellen oder Bearbeiten von Makefiles, da mein Editor so eingerichtet ist, dass er immer nur Leerzeichen enthält.
Können Sie gültige Makefiles ohne Tabulatorzeichen erstellen?
Antworten:
Dies ist eine Kuriosität / Anforderung der Syntax.
make
Sie hat nichts mit Mac OS X zu tun. Leider können Sie nichts dagegen tun, wenn Sie sie verwenden möchtenmake
.Bearbeiten : GNU Make unterstützt jetzt ein benutzerdefiniertes Rezeptpräfix. Siehe diese Antwort .
Sie sind nicht der erste, der diesen Aspekt nicht mag
make
. Um das Handbuch von Unix Haters zu zitieren :quelle
.RECIPEPREFIX
). Eine der folgenden Antworten erwähnt dies ebenfalls und sollte anstelle von meiner als "korrekt" markiert werden. stackoverflow.com/a/21920142In der Zeit, seit diese Frage ursprünglich gestellt wurde, wurde eine Version von GNU Make veröffentlicht, mit der Sie etwas anderes als Tabdas Präfixzeichen verwenden können. Aus der Mailinglistenansage :
Diese Funktion wurde in GNU Make 3.82 hinzugefügt, das im Juli 2010 veröffentlicht wurde (sechs Monate nach dem ursprünglichen Fragedatum dieser Frage). Da es wiederum drei Jahre her ist und sich seitdem ändert, ist es wahrscheinlich, dass andere Make-Aromen GNU Make gefolgt sind.
quelle
Es gibt eine komplizierte Möglichkeit, ein gültiges Makefile ohne Registerkarten zu erstellen.
Wenn Sie Ihr Makefile so ändern, dass es lautet:
Wenn wird funktionieren. Wenn Sie es in mehr als einer Zeile möchten, können Sie Folgendes tun:
Chaotisch, aber es funktioniert.
quelle
.RECIPEPREFIX
ist wahrscheinlich der beste Ansatz. Da ich jedoch keine Lust dazu hatte, habe ich eine Lösung verwendet, die auf dieser basiert. Zeile 1 :target:\
, Zeile 2: [Einrückung mit vier Leerzeichen], gefolgt von;command
Wenn Sie ein vimrc in Ihrem Profil haben, können Sie diese Zeile hinzufügen, um zu verhindern, dass vim zu Leerzeichen wechselt:
Auch ich hatte damit zu kämpfen, und das hat es für mich behoben. Verbreite das gute Wort!
quelle
Dies tut es für mich, wenn Sie Leerzeichen verwenden möchten
Beispiel
quelle
.RECIPEPREFIX
: "Wenn die Variable leer ist (wie standardmäßig ), ist dieses Zeichen das Standard-Tabulatorzeichen." Dies bedeutet, dass die Variable standardmäßig definiert ist. Es wird mit bestätigtifeq ($(origin .RECIPEPREFIX), undefined)
. Da+=
append ein einzelner Raum und die RHS zu den lhs,var +=
Sätzevar
zu einem einzigen Raum (plus eine leere Zeichenkette) solangevar
bereits definiert werden. (Wennvar
nicht definiert,+=
ist das gleiche wie=
.)Im Einfügemodus von vim können Sie
Ctrl-v <TAB>
eine wörtliche Registerkarte einfügen, auch wenn Sie die Tabulatortaste zum Einfügen von Leerzeichen festgelegt haben. Dies beantwortet Ihre Frage natürlich nicht, ist jedoch möglicherweise eine Alternative zu den verfügbaren Methoden, um die Verwendung von wörtlichen Registerkarten zu vermeiden.quelle
Wenn Sie EditorConfig verwenden , können Sie Ihrer
.editorconfig
Datei die folgenden Zeilen hinzufügen , um Ihre IDE zu zwingen, anstelle von Leerzeichen in die Registerkarte zum Einrücken zu verwendenMakefile
:quelle
Bis GNU Make 4.2
Steven Pennys Antwort funktioniert.
Der Grund, warum dies funktioniert, ist in meinem Kommentar beschrieben .
Seit GNU Make 4.3 (veröffentlicht am 19. Januar 2020)
Das Verhalten des
+=
Bedieners wurde rückwärts inkompatibel geändert . Wenn der linke Operand einen leeren Wert hat, wird kein Leerzeichen mehr hinzugefügt.Sie können stattdessen verwenden
, wo
<space>
ist ein einzelnes Leerzeichen. Obwohl$(.RECIPEPREFIX)
es als leerer Wert erweitert wird, ist dies erforderlich, damit GNU Make nicht ignoriert wird<space>
. Beachten Sie, dass dieser Code auch unter GNU Make älter als Version 4.3 funktioniert.quelle
in ubuntu: vi Makefiles ersetzen Leerzeichen durch Tabulatoren (oder alles andere, was Sie wollen):
Zum Beispiel 8 Leerzeichen durch Tabulator ersetzen:
Achtung: ^ Ich füge mit Tabulatortaste ein, nicht ^ und ich Zeichen: D.
quelle
Nicht tragbar. Bestimmte Geschmacksrichtungen von make erfordern unbedingt Tabulatorzeichen. Ein weiterer Grund, Tabulatoren Leerzeichen vorzuziehen :-)
quelle