In the GNU Makefile manual, it mentions these prefixes.
If .ONESHELL is provided, then only the first line of the recipe will be checked for the special prefix characters (‘@’, ‘-’, and ‘+’).
What do these prefixes do, and where are they mentioned?
They control the behaviour of make for the tagged command lines:
@
suppresses the normal 'echo' of the command that is executed.
-
means ignore the exit status of the command that is executed (normally, a non-zero exit status would stop that part of the build).
+
means 'execute this command under make -n
' (or 'make -t' or 'make -q') when commands are not normally executed. See also the POSIX specification for make
and also §9.3 of the GNU Make manual.
The +
notation is a (POSIX-standardized) generalization of the de facto (non-standardized) mechanism whereby a command line containing ${MAKE}
or $(MAKE)
is executed under make -n
.
(@
is discussed in §5.2 of the GNU Make manual; -
is described in §5.5; and §5.7.1 mentions the use of +
.)