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

How to force certain groups of targets to run in parallel with GNU Make?

我已经阅读了几篇文章以确保如何将目标 NOT 并行强制为 运行。但是假设我希望两个目标实际上同时开始并且 运行 并行。这能做到吗?

例如,假设我的目标如下:

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

然后我调用它,例如:

   make -j16 myParallelTarget

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

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

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

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

的东西
myParallelTarget: target1 target2

但是当 make 是带有 -j 参数的 运行 时遇到 myParallelTarget(无论是在命令行上还是作为另一个目标)。

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