O que @, - e + fazem como prefixos das linhas de receita no Make?

172

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?

Matt Joiner
fonte

Respostas:

235

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

Jonathan Leffler
fonte
41

@impede que a linha de comando ecoe para o console. Você pode fazer isso globalmente com -sou--keep-silent

-diz ao make para continuar, mesmo se o comando falhar por algum motivo. Você pode fazer isso globalmente através da -ibandeira (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, -te-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".

TED
fonte