繁体   English   中英

makefile 并行运行目标

[英]makefile run targets in parallel

我有以下 makefile,有两个规则。

有没有办法并行运行这两个规则,我的意思是最大化核心的能力? 我看到了这一部分,但不确定我是否知道如何将它用于我的目的,因为我想在 makefile 中而不是在命令行中处理它。

即并行运行 module1 和 2 个目标。

这是生成文件:

all: module1 module2

.PHONY: module1
module1:
    @echo "run module 1"
    DIR=$(PWD)
    @echo $(DIR)

.PHONY: module2
module2:
    @echo "run module2”

cleanup: 
    fzr clean $(DIR)

您可以设置通常通过 make 文件本身中的命令行调用传递给 make 的make选项。 将此行添加到您的 makefile

MAKEFLAGS += -j2

并且您可以make没有-j标志的情况下调用make ,当它们不相互依赖时,它仍然会产生两个进程来并行构建目标。 要自动确定要生成的作业数量,您可以在 linux 上使用它

NPROCS = $(shell grep -c 'processor' /proc/cpuinfo)
MAKEFLAGS += -j$(NPROCS)

在 MacOS 上

NPROCS = $(shell sysctl hw.ncpu  | grep -o '[0-9]\+')
MAKEFLAGS += -j$(NPROCS)

即使是MAKEFLAGS += -j$(NPROCS)会,如果你有“::”,而不是工作“:”为您的规则,Git中2.25.2(2020日)说明通过最新修补程序

请参阅Jeff King ( peff ) 的commit 2607d39 (2020 年 2 月 18 日
(由Junio C gitster -- gitster --commit 29b09c5 中合并,2020 年 3 月 2 日)

doc-diff : 在渲染 Makefile 时使用单冒号规则

签字人:Jeff King

当通过“man”将 troff 联机帮助页渲染为文本时,我们创建了一个临时 Makefile 并将其提供给“ make ”。
这里的目的有两个:

  • 重用来自同一棵树的先前中断渲染的结果
  • 使用 make 的-j选项并行构建

但是第二部分似乎不起作用(至少对于我的 GNU make 版本,4.2.1)。 它一次只运行一个渲染。

我们对每个文件使用双冒号“ all ”规则,例如:

 all:: foo foo: ...actual render recipe... all:: bar bar: ...actual render recipe... ...and so on...

正是这个双冒号似乎抑制了并行性
我们可以切换到常规的单冒号规则。

尽管我们在这里对“all”确实有多个规则,但我们没有为“all”执行任何配方(我们只关心触发它的依赖项),所以区别是无关紧要的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM