Was macht das Folgende in einem Makefile?
rule: $(deps)
@:
Ich kann dies nicht im make-Handbuch finden.
Es bedeutet "Echo diesen Befehl nicht auf der Ausgabe." Diese Regel lautet also "Führen Sie den Shell-Befehl aus :
und geben Sie die Ausgabe nicht wieder."
Natürlich ist der Shell-Befehl :
ein No-Op, also heißt das: "Tu nichts und sag es nicht."
Warum?
Der Trick dabei ist, dass Sie eine obskure Kombination aus zwei verschiedenen Syntaxen haben. Die make (1) -Syntax ist die Verwendung einer Aktion, die mit @ beginnt und den Befehl einfach nicht wiedergibt. Also eine Regel wie
always:
@echo this always happens
wird nicht emittieren
echo this always happens
this always happens
Der Aktionsteil einer Regel kann nun ein beliebiger Shell-Befehl sein, einschließlich :
. Bash-Hilfe erklärt dies ebenso wie überall:
$ help :
:: :
Null command.
No effect; the command does nothing.
Exit Status:
Always succeeds.
@:
(nicht nur@
) fragen, dann könnte es zusätzlich zu @ guestolios Antwort auch ein übrig gebliebener Entwicklungsstummel sein. Es ist wie das Schreiben einer Funktion in Python, die nur enthältpass
. Es kann nützlich sein, um Codeblöcke zum Kopieren / Einfügen zu stubben, aber sie sollten im Allgemeinen nicht lange existieren. Wenn die Datei auf diese Weise stubbt, wird sie immer noch kompiliert,Für diejenigen, die neugierig sind, warum Sie dies tun könnten, ist es nützlich, wenn Sie so tun möchten, als wäre etwas getan worden, damit Make nicht "Nichts zu tun für" Ihr Ziel ausgibt.
Ein Beispiel ist, wenn Sie ein falsches Ziel haben, das Sie immer ausführen, und in dem Sie eine Reihe von Bedingungen im Befehl haben. Sie möchten zumindest etwas haben, falls diese Bedingungen falsch sind und nichts unternommen wird.
Zum Beispiel (aus Linux-Skripten / Makefile.clean):
quelle