Submake是通过include语句而不是像其他SO答案那样的for循环引入的。
root makefile
1 all: build
2
3 GIT_ROOT ?= $(shell git rev-parse --show-toplevel)
4
8
9 # These get piggybacked onto by the sub-Makefiles
10 BUILD_DEPS =
11 CLEAN_DEPS =
12 PACKAGE_DEPS =
13 TEST_DEPS =
14
15 define validate_in_path
16 @which $(1) >/dev/null || (echo "Expected to find '$(1)' in PATH" && exit 1)
17 endef
18
19 include $(GIT_ROOT)/*/Makefile.sub
20
21 .PHONY: all build clean package
22
23 build: $(BUILD_DEPS)
大多数子make看起来像这样,它们所做的只是在上游调用一个函数,并为该函数使用的路径传递参数。
我应该怎么做才能使整个制造过程结束,也就是说,如果该子制造中的第5行失败,那么其他所有递归启动的制造也将结束。
我真正不想做的是将shell逻辑放在这里,以便在某些内容以非零代码退出时执行PID终止顶层进程。
sub makefile
1 $(eval $(call declare_node_service,autoscaler))
2 .PHONY += autoscaler clean-autoscaler package-autoscaler
3
4 autoscaler: node-lib
5 $(call build_node,autoscaler)
6
7 clean-autoscaler:
8 $(call clean_node,autoscaler)
9
10 package-autoscaler: autoscaler
11 $(call package_node,autoscaler)
12
13 test-autoscaler: autoscaler
14 $(call test_node,autoscaler)