如何强制某些目标组与 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
(无论是在命令行上还是作为另一个目标)。
相反,阻止目标并行 运行 意味着手动 运行 或通过先决条件链对它们进行显式排序。
我已经阅读了几篇文章以确保如何将目标 NOT 并行强制为 运行。但是假设我希望两个目标实际上同时开始并且 运行 并行。这能做到吗?
例如,假设我的目标如下:
myParallelTarget:
$(MAKE) target1;
$(MAKE) target2;
然后我调用它,例如:
make -j16 myParallelTarget
我有一个项目当然比这个更复杂,但这是一般形式。即使我用 -j16 调用我的 Makefile,它仍然会在恢复到 target2 之前构建 target1。
当我查看构建输出时,我觉得如果立即启动 target2,构建可能会执行得更快,即似乎有些线程正在等待 target1 完成。是否可以同时强制启动目标?
make parallelism 并行化作为先决条件找到的目标。它不会并行化目标配方中的行。这些总是按顺序一次执行一个。
如果你想并行化这两个 make 命令,那么你需要使用更像
的东西myParallelTarget: target1 target2
但是当 make 是带有 -j
参数的 运行 时遇到 myParallelTarget
(无论是在命令行上还是作为另一个目标)。
相反,阻止目标并行 运行 意味着手动 运行 或通过先决条件链对它们进行显式排序。