如何强制某些目标组与GNU Make并行运行?

时间:2015-03-19 21:58:41

标签: makefile gnu-parallel

我已阅读了几篇帖子,以确保如何强制目标 NOT 并行运行。但是假设我希望两个目标实际上同时启动并且并行运行。可以这样做吗?

例如,假设我有一个目标如下:

    myParallelTarget:
         $(MAKE) target1;
         $(MAKE) target2;

然后我用它来称呼它:

   make -j16 myParallelTarget

我有一个比这个项目更复杂的项目,但这是一般形式。即使我用-j16调用我的Makefile,它仍会在恢复到target2之前构建target1。

当我查看构建输出时,我感觉如果target2立即启动,构建可能会执行得更快,即似乎某些线程正在等待target1完成。是否有可能同时强制启动目标?

1 个答案:

答案 0 :(得分:4)

使并行性并行化作为先决条件找到的目标。它不会并行化目标配方中的行。这些总是按顺序一次执行一次。

如果你想并行化这两个make命令,那么你需要使用更像

的东西
myParallelTarget: target1 target2

但是当使用myParallelTarget参数运行make时(无论是在命令行上还是作为另一个目标的先决条件),如果遇到-j,那些将并行运行。

相反,阻止目标并行运行意味着手动运行它们或通过先决条件链对它们进行显式排序。