使用循环时如何使makefile退出并出错?

时间:2013-10-17 20:29:05

标签: bash makefile

如果我有以下bash命令:

for i in ./ x ; do ls $i ; done && echo OK

" ls ./"执行,然后" ls x",失败(缺少x),不打印OK。

如果

for i in x ./ ; do ls $i ; done && echo OK

然后即使" ls x"失败,因为for循环中的最后一个语句成功,然后打印OK。在makefile中使用shell for循环时出现问题:

x:
    for i in $(LIST) ; do \
        cmd $$i  ;\
    done 

如果cmd的任何单独执行失败,如何使make失败?

2 个答案:

答案 0 :(得分:17)

使用break命令在命令失败时终止循环

x:
    for i in $(LIST) ; do \
        cmd $$i || break ;\
    done 

但这不会使makefile中止。您可以将exit与非零代码一起使用:

x:
    for i in $(LIST) ; do \
        cmd $$i || exit 1 ;\
    done 

答案 1 :(得分:1)

执行该命令后,使用$?检查该命令的返回值,作为其make文件,您需要使用双$。如果非零,则退出失败。

x:
    set -e
    for i in $(LIST); do \
        cmd $$i; \
        [[ $$? != 0 ]] && exit -1; \
        echo 'done'; \
    done