Ich versuche, GNU Make 3.81 anzuweisen, nicht anzuhalten, wenn ein Befehl fehlschlägt (daher stelle ich dem Befehl das Präfix voran -
), aber ich möchte auch den Beendigungsstatus beim nächsten Befehl überprüfen und eine informativere Meldung ausgeben. Mein unten stehendes Makefile schlägt jedoch fehl:
$ 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!
Warum echo das Makefile oben "Erfolg!" statt "scheitern!" ?
aktualisieren:
Im Folgenden wird die akzeptierte Antwort beschrieben und erweitert:
failure:
@-/bin/false && ([ $$? -eq 0 ] && echo "success!") || echo "failure!"
success:
@-/bin/true && ([ $$? -eq 0 ] && echo "success!") || echo "failure!"
.SHELLFLAGS = -ec
sollte verwendet werden. In diesem Fall können Sie jedoch nicht -
mehr das Präfix (für den persönlichen Befehl der Quittung) verwenden, da das make schreibt, dass der Fehler ignoriert wird, aber trotzdem den gesamten Block nicht besteht. Ist || :
also eine Lösung, um den Befehl zu ignorieren. Aber es ist nicht plattformübergreifend (Windows hat nicht || :
oder || true
)
.ONESHELL:
Richtlinie untersuchen.