O GNU Make não ignora o comando com falha

3

Eu escrevi uma regra em que um diretório deve ser removido se existir:

.PHONY: distclean
distclean:
    -rmdir release

make distclean impressões:

rmdir release
rmdir: failed to remove ‘release’: No such file or directory
test.mak:3: recipe for target 'distclean' failed
make: [distclean] Error 1 (ignored)

O sinal - não deve fazer o GNU Make ignorar o erro?

Estou usando o GNU Make 4.0.

    
por Elena 28.06.2015 / 18:10

1 resposta

6

Make está ignorando o erro:

make: [distclean] Error 1 (ignored)

Ele ainda imprime as mensagens de erro, mas se você adicionar outra regra no distclean destino, ele deverá ser processado apesar da rmdir de falha.

Mais detalhadamente:

rmdir release

Isso é make imprimindo o comando que está prestes a ser executado.

rmdir: failed to remove ‘release’: No such file or directory

Isso é rmdir imprimindo uma mensagem de erro porque release não existe. Para remover isso, você adicionaria 2> /dev/null ao comando (ou >& /dev/null para silenciar rmdir completamente).

test.mak:3: recipe for target 'distclean' failed

rmdir sai com um código de saída diferente de zero, por isso make imprime uma mensagem de erro. Para remover isso, você adicionaria || true ao comando (para que ele saia com um código de saída zero em todos os casos).

make: [distclean] Error 1 (ignored)

Por fim, como o comando foi prefixado com - , o erro será ignorado e make continuará.

    
por 28.06.2015 / 18:46

Tags