9

我是 shell 脚本的新手。我想以特定顺序从 Shell 脚本调用生成文件列表。对于每个makefile,我想得到结果(make 是成功还是失败)。如果有任何错误我想停止脚本执行。如果成功,我必须运行下一个makefile。

4

2 回答 2

12

一个常见的习惯用法是使用 ; 创建一个 shell 脚本set -e。这将导致脚本在第一个错误时退出。

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

如果您需要对整个脚本进行更多控制,则可以删除并在失败set -e时显式退出:make

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

为了减少代码重复,创建一个循环:

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

明确地说,||“或”和&&“和”连接词是

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

最后,您描述的行为听起来与 Make 本身的行为完全一样。也许顶级 Makefile 实际上是适合您的方案的解决方案?

.PHONY: all
all:
    $(MAKE) -f Makefile1
    $(MAKE) -f Makefile2
于 2013-06-14T07:00:28.600 回答
2
make -f makefile1
make -f makefile2

按顺序运行make文件

保存每个 makefile 的输出

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

在每个 make 文件之后检查结果

make -f makefile1 >> output1

在此行脚本之后使用
echo $? 这与 if 结合使用。如果回声$?结果为零,那么你就成功了,所以如果 echo$? 结果为零然后运行下一个文件,否则退出

于 2013-06-14T06:50:29.613 回答