失败时中断构建过程

Interrupting build process on failure

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

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

我认为配方行的 return 代码源于该配方行中最后执行的命令 - 在您的情况下,这是 cd ../.. 即使紧接在前面的递归 makefile 也不会失败可能失败了。所以对于主生成文件,这一行 return 没问题,它不会停止。好消息:因为每个配方行都在 shell 中执行(sh !不是 bash 除非你明确告诉 make)这意味着终端 cd ../.. 是完全可有可无的shell 执行后立即关闭。放下它,您的 makefile 应该会如您所愿。

顺便说一句,你应该写 cd subdir && $(MAKE)$(MAKE) -C subdir 这样你也可以捕获 non-existent 目录。

您可以考虑使用 non-recursive 编写 makefile 的方式。 Google 对于 "Recursive make considered harmful" 并决定所描述的问题是否响起...