J'essaie de demander à GNU Make 3.81 de ne pas s'arrêter si une commande échoue (donc je préfixe la commande avec -
) mais je veux également vérifier l'état de sortie sur la commande suivante et imprimer un message plus informatif. Cependant mon Makefile ci-dessous échoue:
$ 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!
Pourquoi le Makefile ci-dessus fait-il écho au "succès!" au lieu de "l'échec!" ?
mise à jour:
En suivant et en développant la réponse acceptée, voici comment elle doit être écrite:
failure:
@-/bin/false && ([ $$? -eq 0 ] && echo "success!") || echo "failure!"
success:
@-/bin/true && ([ $$? -eq 0 ] && echo "success!") || echo "failure!"
.SHELLFLAGS = -ec
il faut utiliser. Mais dans ce cas, vous ne pouvez plus utiliser le -
préfixe (pour la commande personnelle du reçu) car la marque écrira que l'erreur est ignorée mais échouera tout le bloc. C'est donc || :
la solution pour ignorer la commande. Mais ce n'est pas multiplateforme (Windows n'a pas || :
ou || true
)
.ONESHELL:
directive.