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

被刻印的时光 ゝ 提交于 2019-11-26 04:32:16

问题


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?


回答1:


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




回答2:


@ 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".



来源:https://stackoverflow.com/questions/3477292/what-do-and-do-as-prefixes-to-recipe-lines-in-make

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!