2013-06-14 9 views
5

Ich bin neu in Shell-Skript. Ich möchte eine Liste von make-Dateien vom Shell-Skript in einer bestimmten Reihenfolge aufrufen. Für jedes Makefile möchte ich das Ergebnis erhalten (make ist Erfolg oder Misserfolg). Wenn ein Fehler auftritt, möchte ich die Skriptausführung stoppen. Wenn es erfolgreich ist, muss ich das nächste Makefile ausführen.Aufruf von Makefiles von Shell Script

+0

Wie 'make1 && make2 && make3'? – pfnuesel

+0

Oder 'make -f makefile1 && make -f makefile2 && ...' – devnull

Antwort

6

Ein gängiges Idiom ist es, ein Shell-Skript mit set -e zu erstellen; Dies führt dazu, dass das Skript beim ersten Fehler beendet wird.

#!/bin/sh 
set -e 
make -f Makefile1 
make -f Makefile2 
: 

Wenn Sie mehr Kontrolle über das Skript insgesamt benötigen, entfernen Sie vielleicht set -e und stattdessen explizit Ausgang auf make failure:

make -f Makefile1 || exit 
make -f Makefile2 || exit 

Um Code-Duplizierung zu reduzieren, erstellen Sie eine Schleife:

for f in Makefile1 Makefile2; do 
    make -f "$f" || exit 
done 

Nur um explizit zu sein, die || "oder" und && "und" Konnektoren sind Abkürzungen für

if make -f Makefile1; then 
    : "and" part 
else 
    : "or" part 
fi 

Schließlich klingt das Verhalten, das Sie beschreiben, genau wie Make sich verhält. Vielleicht wäre ein Makefile auf oberster Ebene tatsächlich eine geeignete Lösung für Ihr Szenario?

2
make -f makefile1 
make -f makefile2 

machen Dateien laufen, um die Ausgabe jeder Make-Datei

make -f makefile1 >> output1 
make -f makefile2 >> output2 

zu überprüfen, um das Ergebnis zu speichern, nachdem jede Datei

make -f makefile1 >> output1 

nach dieser Zeile Skript machen Verwenden Sie
echo $? dies in Kombination mit if. wenn echo $? Ergebnis Null dann machen Sie Ihren Erfolg, wenn Echo $? Ergebnis 0, dann nächste Datei laufen lassen andere weise beenden

+0

Es könnte hilfreich sein, auch die Fehler zu protokollieren, d. H. 'Make -f makefile1 & >> output1' – pfnuesel