GNU make - 如何序列化调用foreach $(MAKE)

时间:2017-01-31 19:55:39

标签: makefile gnu-make

我有

$(foreach ___project___, $(UNIT_TEST_STUBS),$(MAKE) -C ../../$(___project___) $(UT_CMD) || exit 1;)

我希望make在每个子制作中并行,但我不希望子制作并行执行。

我该怎么做?

1 个答案:

答案 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