我有以下带有两个规则的文件。
有没有办法并行运行这两个规则,我的意思是最大化 核心能力?我看到了这个section,但不确定我是如何使用它的,因为我想在makefile中而不是从命令行处理它。
即并行运行module1&2目标。
这是makefile:
all: module1 module2
.PHONY: module1
module1:
@echo "run module 1"
DIR=$(PWD)
@echo $(DIR)
.PHONY: module2
module2:
@echo "run module2”
cleanup:
fzr clean $(DIR)
答案 0 :(得分:9)
您可以设置make
选项,这些选项通常是通过makefile本身的命令行调用传递给make的。将此行添加到您的makefile中
MAKEFLAGS += -j2
并且您可以调用make
而不使用-j
标志,当它们彼此不依赖时,它们仍将产生两个进程来并行构建目标。要自动确定要产生的作业数量,可以在linux上使用
NPROCS = $(shell grep -c 'processor' /proc/cpuinfo)
MAKEFLAGS += -j$(NPROCS)
和MacOS
NPROCS = $(shell sysctl hw.ncpu | grep -o '[0-9]\+')
MAKEFLAGS += -j$(NPROCS)
答案 1 :(得分:0)
如果您的规则使用'::'而不是':',那么即使MAKEFLAGS += -j$(NPROCS)
也不起作用,如Git 2.25.2(2020年3月)中的最新修复所示)
请参见commit 2607d39的Jeff King (peff
)(2020年2月18日)。
(由Junio C Hamano -- gitster
--在commit 29b09c5中合并,2020年3月2日)
doc-diff
:在渲染Makefile中使用单冒号规则签名人:杰夫·金
当通过“ 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...
而这种双冒号似乎抑制了并行性。
我们可以切换到常规的单冒号规则。即使我们在这里为“全部”设置了多个规则,我们也没有针对“全部”执行任何配方(我们只关心触发其依赖性),因此区别是无关紧要的。