失败时中断构建过程
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" 并决定所描述的问题是否响起...
我有一个 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" 并决定所描述的问题是否响起...