我有
$(foreach ___project___, $(UNIT_TEST_STUBS),$(MAKE) -C ../../$(___project___) $(UT_CMD) || exit 1;)
我希望make
在每个子制作中并行,但我不希望子制作并行执行。
我该怎么做?
答案 0 :(得分:2)
正如@Michael Livshin指出的那样,你似乎已经回答了自己的问题。 可能更需要依靠 make 而不是shell语法来将一大堆命令绑定在一起。 基本上你想让 make 看到这样的东西:
/usr/local/opt/llvm/bin/clang++ -fopenmp OpenMPDemo.cpp -L/usr/local/opt/llvm/lib -I/usr/local/opt/llvm/include -o demo
从列表中自动生成非常简单。
.PHONY: all
all:
${MAKE} -C ../../foo/ -j9 ut-cmd
${MAKE} -C ../../bar/ -j9 ut-cmd
${MAKE} -C ../../bum/ -j9 ut-cmd
请注意submakes := foo bar bum
define generate-submake
${MAKE} -C ../../$1/ ut-cmd
endef
.PHONY: all
all: ; $(foreach _,${submakes},$(call generate-submake,$1))
定义中的空白行。这很重要。
使用generate-submake
运行此功能。
如果你真的希望这个makefile中的所有内容都是串行运行的(但是sub-make是并行的),那么只需引入一个make -j9
目标。
.NOTPARALLEL