Ich verwende ein Makefile (mit GNU make unter Linux), um meine Routinearbeit beim Refactoring eines Python-Skripts zu automatisieren. Das Skript erstellt eine Ausgabedatei, und ich möchte sicherstellen, dass die Ausgabedatei bei meinen Refactorings unverändert bleibt.
Ich habe jedoch keinen Weg gefunden, den Statuscode eines Befehls so zu nutzen, dass er sich auf einen nachfolgenden Shell-Befehl auswirkt.
Die folgende Regel verdeutlicht das Problem:
check-cond-codes:
diff report2008_4.csv report2008_4.csv-save-for-regression-testing; echo no differences: =$$!=
diff -q poalim report2008_4.csv; echo differences: =$$!=
Der erste 'diff' vergleicht zwei gleiche Dateien, und der zweite vergleicht zwei verschiedene Dateien. Die Ausgabe ist:
diff report2008_4.csv report2008_4.csv-save-for-regression-testing; echo no differences: =$!=
no differences: ==
diff -q poalim report2008_4.csv; echo differences: =$!=
Files poalim and report2008_4.csv differ
differences: ==
Offensichtlich ist '$$!' die falsche Variable, um den Statuscode von 'diff' zu erfassen. Selbst die Verwendung von SHELL := /bin/bash am Anfang des Makefiles hat das Problem nicht gelöst.
Eine Variable, die den Wert zurückgibt, den ich benötige, würde (falls sie überhaupt existiert) in einem 'if'-Befehl in der eigentlichen Regel verwendet werden.
Die Alternative, ein kleines Ad-hoc-Shell-Skript anstelle des Schreibens aller Befehle direkt im Makefile zu erstellen, ist unerwünscht, aber ich werde sie als letzten Ausweg nutzen.
Verwandt:
0 Stimmen
Ich glaube, du suchst die Variable
.SHELLSTATUS
: Wie man den Exit-Status eines Shell-Befehls in einem GNU Makefile erhält?