Estou tentando instruir o GNU Make 3.81 a não parar se um comando falhar (então prefixo o comando -
), mas também quero verificar o status de saída no próximo comando e imprimir uma mensagem mais informativa. No entanto, meu Makefile abaixo falha:
$ cat Makefile
all:
-/bin/false
([ $$? -eq 0 ] && echo "success!") || echo "failure!"
$
$ make
/bin/false
make: [all] Error 1 (ignored)
([ $? -eq 0 ] && echo "success!") || echo "failure!"
success!
Por que o Makefile acima ecoa "sucesso!" em vez de "fracasso!" ?
atualizar:
Seguindo e expandindo a resposta aceita, abaixo está como ela deve ser escrita:
failure:
@-/bin/false && ([ $$? -eq 0 ] && echo "success!") || echo "failure!"
success:
@-/bin/true && ([ $$? -eq 0 ] && echo "success!") || echo "failure!"
.SHELLFLAGS = -ec
deva ser usado. Mas, neste caso, você não pode usar -
mais o prefixo (para comando pessoal do recibo) porque o make escreverá que o erro é ignorado, mas ainda falhará em todo o bloco. Então, essa || :
é a solução para ignorar o comando. Mas não é multiplataforma (o Windows não tem || :
ou || true
)
.ONESHELL:
diretiva.