2014-01-14 10 views
9

Dies ist etwas anders als Can a Makefile execute code ONLY when an error has occurred?.Kann GNU eine Regel ausführen, wenn ein Fehler auftritt?

würde ich eine Regel oder spezielles Ziel wie das gemacht wird, wenn ein Fehler (unabhängig von dem gegebenen Ziel, ohne die Regel für jedes Ziel zu ändern, wie die andere Antwort mit dem Operator || scheint zu implizieren) auftritt.

In dmake ist es spezielles Ziel.ERROR dass ausgeführt wird, wenn ein Fehlerzustand erkannt wird. Gibt es eine ähnliche Sache mit GNU make?

(Ich bin immer noch mit GNU 3,81 machen, aber ich habe nichts in der Dokumentation des neuen GNUS 4.0 entweder machen finden)

+0

Nein, GNU make unterstützt dies nicht. Sie können es tun, wenn Sie Rekursion verwenden, um das make "main" zu umbrechen und dann einen Befehl auszuführen, wenn es fehlschlägt, aber das ist es auch schon. – MadScientist

Antwort

7

Gnu unterstützt es nicht explizit, aber es gibt Möglichkeiten, fast zu hacken etwas. Geben Sie 1 zurück, wenn eine der Marken nicht funktioniert. Das bedeutet, dass Sie können, auf der Kommandozeile, Rerun mit Fehlern Regel machen, wenn die erste make fehlgeschlagen:

make || make error_targ 

Natürlich, ich nehme an, Sie wollen einfach nur in der Make-Datei selbst die zusätzliche Komplexität setzen. Wenn dies der Fall ist, können Sie eine rekursive Make-Datei zu erstellen:

all: 
    $(MAKE) normal_targ || $(MAKE) error_targ 

normal_targ: 
     ... normal make rules ... 

error_targ: 
     ... other make rules ... 

Dies wird die Make-Datei verursachen, um zu versuchen normal_targ zu bauen, und genau dann, wenn es fehlschlägt, wird es error_targ laufen. Es macht es etwas schwieriger, das Makefile für Unerfahrene zu lesen, aber es bringt die ganze Logik an einen Ort.

Verwandte Themen