2013-06-14 14 views
5

Jestem nowy w skrypcie powłoki. Chcę wywołać listę plików make ze skryptu Shell w określonej kolejności. Dla każdego makefile chcę uzyskać wynik (make to success or failure). Jeśli jakiś błąd chcę zatrzymać wykonywanie skryptu. Jeśli to sukces, muszę uruchomić następny plik Makefile.Wywoływanie plików Makefile z Shell Script

+0

Podoba Ci się 'make1 && make2 && make3'? – pfnuesel

+0

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

Odpowiedz

6

Powszechnym idiomem jest stworzenie skryptu powłoki z set -e; to spowoduje, że skrypt zakończy działanie przy pierwszym błędzie.

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

Jeśli potrzebujesz większej kontroli nad scenariuszem wierzchnie może usunąć set -e i zamiast wyraźnie zjazd na make awarii:

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

celu zmniejszenia powielania kodu, należy utworzyć pętlę:

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

Dla jasności, || "lub" i && "i" łączniki są skrótem dla

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

W końcu opisane zachowanie brzmi dokładnie tak, jak zachowuje się sama marka. Być może plik Makefile na najwyższym poziomie byłby właściwie odpowiednim rozwiązaniem dla twojego scenariusza?

.PHONY: all 
all: 
    $(MAKE) -f Makefile1 
    $(MAKE) -f Makefile2 
2
make -f makefile1 
make -f makefile2 

uruchomić tworzyć pliki w kolejności

ratowania wyjście każdego makefile

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

aby sprawdzić wynik po każdej marki plikowi

make -f makefile1 >> output1 

po tym skrypcie linii użyć
echo $? to w połączeniu z if. jeśli echo $? wynik zero, a następnie twój sukces, więc jeśli echo $? wynik zero następnie uruchom następny plik inne mądre wyjście

+0

Pomocne może być również zarejestrowanie błędów, np. 'Make -f makefile1 & >> output1' – pfnuesel

Powiązane problemy