No manual GNU Makefile, ele menciona esses prefixos.
Se .ONESHELL for fornecido, somente a primeira linha da receita será verificada quanto aos caracteres especiais de prefixo ('@', '-' e '+').
O que esses prefixos fazem e onde são mencionados?
Eles controlam o comportamento do make para as linhas de comando marcadas:
@
suprime o eco normal do comando que é executado.
-
significa ignorar o status de saída do comando que é executado (normalmente, um status de saída diferente de zero interrompe essa parte da construção).
+
significa 'executar este comando em make -n
' (ou 'make -t' ou 'make -q') quando os comandos não são normalmente executados. Veja também a especificação POSIX make
e também o §9.3 do manual GNU Make.
A +
notação é uma generalização (padronizada pelo POSIX ) do mecanismo de fato (não padronizado) pelo qual uma linha de comando contendo ${MAKE}
ou $(MAKE)
é executada make -n
.
( @
é discutido no §5.2 do manual GNU Make; -
é descrito no §5.5 ; e §5.7.1 menciona o uso de +
.)
@
impede que a linha de comando ecoe para o console. Você pode fazer isso globalmente com -s
ou--keep-silent
-
diz ao make para continuar, mesmo se o comando falhar por algum motivo. Você pode fazer isso globalmente através da -i
bandeira (ou --ignore-errors
).
+
Eu não era familiar antes de você perguntar. Tão perto quanto eu posso dizer, isso anula o efeito de -n
, -t
e-q
, todos os quais, basicamente, dizer make a verdade não executar os comandos. Portanto, uma linha com um +
na frente seria executada de qualquer maneira.
Se você ler o manual oficial do Gnu Make, todos serão mencionados no Capítulo 5 . Na minha cópia antiga do manual, que era o capítulo sobre "comandos", mas o termo du jour agora parece ser "receitas".