In der GNU Makefile Handbuch, es erwähnt diese Präfixe.
Wenn .ONESHELL angegeben ist, wird nur die erste Zeile des Rezepts auf die Sonderzeichen ('@', '-' und '+') überprüft.
Was machen diese Präfixe und wo werden sie erwähnt?
Sie steuern das Verhalten von make für die markierten Befehlszeilen:
@
unterdrückt das normale 'Echo' des ausgeführten Befehls.
-
bedeutet, den Exit-Status des ausgeführten Befehls zu ignorieren (normalerweise würde ein Exit-Status ungleich Null diesen Teil des Builds stoppen).
+
bedeutet 'diesen Befehl ausführen unter make -n
' (oder 'make -t' oder 'make -q'), wenn Befehle normalerweise nicht ausgeführt werden. Siehe auch die POSIX-Spezifikation für make
und auch §9.3 des GNU Make-Handbuchs.
Die +
Notation ist eine (POSIX-standardisierte) Verallgemeinerung des De-facto -Mechanismus (nicht standardisiert), wobei eine Befehlszeile enthält ${MAKE}
oder $(MAKE)
unter ausgeführt wird make -n
.
( @
wird in §5.2 des GNU Make-Handbuchs besprochen ; -
wird in §5.5 beschrieben ; und §5.7.1 erwähnt die Verwendung von +
.)
@
verhindert, dass die Befehlszeile zur Konsole zurückgesendet wird. Sie können dies global mit -s
oder tun--keep-silent
-
weist make an, weiterzumachen, auch wenn der Befehl aus irgendeinem Grund fehlschlägt. Sie können dies global über das -i
Flag (oder --ignore-errors
) tun .
+
Ich war nicht vertraut, bevor Sie gefragt haben. So nahe , wie ich sagen kann, negiert er die Wirkung von -n
, -t
und -q
, von denen alle im Grunde machen sagen, nicht tatsächlich die Befehle auszuführen. Eine Linie mit einem +
vorne würde also sowieso laufen.
Wenn Sie das offizielle Gnu Make-Handbuch lesen, werden alle in Kapitel 5 erwähnt . In meiner alten Kopie des Handbuchs war das das Kapitel über "Befehle", aber der Begriff du jour scheint jetzt "Rezepte" zu sein.