Sto cercando di indicare a GNU Make 3.81 di non fermarsi se un comando fallisce (quindi prefisso il comando con -
) ma voglio anche controllare lo stato di uscita sul comando successivo e stampare un messaggio più informativo. Tuttavia il mio Makefile qui sotto fallisce:
$ 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!
Perché il Makefile sopra fa eco "successo!" invece di "fallimento!" ?
aggiornare:
Di seguito e l'espansione della risposta accettata, di seguito è riportato come deve essere scritto:
failure:
@-/bin/false && ([ $$? -eq 0 ] && echo "success!") || echo "failure!"
success:
@-/bin/true && ([ $$? -eq 0 ] && echo "success!") || echo "failure!"
.SHELLFLAGS = -ec
dovrebbe essere usato. Ma in questo caso non è possibile utilizzare -
più il prefisso (per il comando personale della ricevuta) perché il make scriverà che l'errore viene ignorato ma comunque fallirà tutto il blocco. Quindi, || :
è una soluzione per ignorare il comando. Ma non è multipiattaforma (Windows no || :
o || true
)
.ONESHELL:
direttiva.