Estoy tratando de indicarle a GNU Make 3.81 que no se detenga si falla un comando (así que prefiero el comando con -
), pero también quiero verificar el estado de salida en el siguiente comando e imprimir un mensaje más informativo. Sin embargo, mi Makefile a continuación falla:
$ 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 qué el Makefile anterior hace eco de "éxito"! en lugar de "fracaso" ?
actualizar:
A continuación y ampliando la respuesta aceptada, a continuación se explica cómo debe escribirse:
failure:
@-/bin/false && ([ $$? -eq 0 ] && echo "success!") || echo "failure!"
success:
@-/bin/true && ([ $$? -eq 0 ] && echo "success!") || echo "failure!"
.SHELLFLAGS = -ec
debe utilizar. Pero en este caso no puede usar el -
prefijo más (para el comando personal del recibo) porque la marca escribirá que el error se ignora pero aún fallará todo el bloque. Entonces, || :
es una la solución para ignorar el comando. Pero no es multiplataforma (Windows no tiene || :
o || true
)
.ONESHELL:
directiva.