簡體   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