【发布时间】:2017-01-31 19:55:38
【问题描述】:
我有
$(foreach ___project___, $(UNIT_TEST_STUBS),$(MAKE) -C ../../$(___project___) $(UT_CMD) || exit 1;)
我希望make 在每个子制作中是并行的,但我不希望子制作并行执行。
我该怎么做?
【问题讨论】:
-
如果你提供一个完整的规则,至少会更容易回答。但是,假设您在这里引用的是配方的内容,这将按照您想要的方式运行:每个子 make 将被串行调用,并且在每个子 make 中,目标将被并行构建。
-
@MadScientist 那么如果我希望 submakes 并行执行该怎么写呢?
-
你不能从一个目标/配方中做到这一点。您必须为每个子 make 编写一个目标,因此 make 可以正确地并行化它们。例如:stackoverflow.com/questions/17834582/…
-
sn-p 看起来像食谱的一部分,它的扩展是
$(MAKE) -C ../../foo/ ut-cmd || exit 1; $(MAKE) -C ../../bar/ ut-cmd || exit 1; etc。因此,子制作将由同一个 shell 实例串行执行。只需在$(MAKE)之后添加-j<whatever>即可。我在这里错过了什么吗? -
@MichaelLivshin 我假设如果你有
$(MAKE) -C A\ all\n $(MAKE) -C B\ all两个makefile 将并行执行;这不正确吗?