views:

49

answers:

2

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?

A: 

@ prevents the command line from echoing out to the console. You can do it globally with -s or --keep-silent

- tells make to keep going, even if the command fails for some reason. You can do it globally via the -i flag (or --ignore-errors).

+ I was not familar with before you asked. As near as I can tell, it negates the effect of -n, -t, and -q, all of which basically tell make to not actually run the commands. So a line with a + at the front would get run anyway.

If you read the official Gnu Make manual, they are all mentioned in Chapter 5. In my old copy of the manual that was the chapter on "commands", but term du jour now seems to be "recipes".

T.E.D.
+1  A: 

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' (when commands are not normally executed).

The + notation is a generalization of the mechanism whereby a command containing ${MAKE} or $(MAKE) is executed under make -n.

(@ is discussed in §5.2 of the manual you link to; - is described in §5.5; and §5.7.1 mentions the use of +.)

Jonathan Leffler