[英]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.