19 Stimmen

Shell-Statuscodes in Make

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?

-4voto

Charlie Martin Punkte 106684

Versuchen Sie `\$?' Ich denke, dass das $$ vom Makefile interpretiert wird

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X