What do @, - and + do as prefixes to recipe lines in Make?

Matt Joiner picture Matt Joiner · Aug 13, 2010 · Viewed 43.3k times · Source

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?

Answer

Jonathan Leffler picture Jonathan Leffler · Aug 13, 2010

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 +.)