2013-06-14 19 views
5

Tôi mới làm kịch bản lệnh shell. Tôi muốn gọi một danh sách tạo các tập tin từ Shell script theo một thứ tự cụ thể. Đối với mỗi makefile tôi muốn có được kết quả (thực hiện thành công hay thất bại). Nếu có bất kỳ lỗi nào tôi muốn dừng việc thực thi tập lệnh. Nếu thành công, tôi phải chạy makefile tiếp theo.Gọi makefiles từ Shell Script

+0

Giống như 'make1 && make2 && make3'? – pfnuesel

+0

Hoặc 'make -f makefile1 && make -f makefile2 && ...' – devnull

Trả lời

6

Thành ngữ phổ biến là tạo tập lệnh shell với set -e; điều này sẽ khiến cho tập lệnh thoát khỏi lỗi đầu tiên.

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

Nếu bạn cần kiểm soát nhiều hơn kịch bản tổng thể, có thể loại bỏ set -e và thay vào đó một cách rõ ràng lối ra make thất bại:

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

Để giảm sự trùng lặp mã, tạo ra một vòng lặp:

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

Chỉ cần rõ ràng, các kết nối || "hoặc" và && "và" là viết tắt cho

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

Cuối cùng, hành vi bạn mô tả âm thanh chính xác như cách hoạt động của chính nó. Có lẽ một Makefile cấp cao nhất thực sự sẽ là một giải pháp thích hợp cho kịch bản của bạn?

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

để chạy tạo file ảnh theo thứ tự

để tiết kiệm đầu ra của mỗi makefile

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

để kiểm tra kết quả sau mỗi lần làm cho tập tin

make -f makefile1 >> output1 

sau khi kịch bản dòng này sử dụng
echo $? điều này kết hợp với nếu. nếu echo $? kết quả bằng không thì thành công của bạn nên nếu echo $? kết quả bằng không, sau đó chạy tệp tiếp theo theo lối ra khôn ngoan khác

+0

Cũng có thể hữu ích khi cũng ghi lại các lỗi, tức là 'make -f makefile1 & >> output1' – pfnuesel