失败时中断构建过程

时间:2019-07-16 07:51:06

标签: makefile gnu-make

我有一个makefile,它执行构建过程的几个步骤,但是即使在某些步骤中发生错误,它仍然继续构建。这是预期的行为吗?还是我做错了什么?

all:
    cd projects/project1/; $(MAKE); cd ../..
    cd projects/project2/; $(MAKE); cd ../..
    cd projects/project3/; $(MAKE); cd ../..

1 个答案:

答案 0 :(得分:2)

我认为配方行的返回代码源自该配方行中最后执行的命令-在您的情况下,这是cd ../..,即使紧前面的递归Makefile可能已失败,它也不会失败。因此,对于主makefile,此行返回ok,并且不会停止。好消息:因为每条配方行都在外壳中执行(sh!除非您明确地告诉make,否则bash除外),这意味着终端cd ../..完全可以在执行它的外壳中使用此后立即关闭。删除它,您的makefile应该会表现出所需的效果。

顺便说一句,您应该编写cd subdir && $(MAKE)$(MAKE) -C subdir,以便也可以捕获不存在的目录。

您可能会考虑使用非递归方式来编写makefile。 Google提出“将递归视为有害”,并决定所描述的问题是否引起人们的注意……