簡體   English   中英

Makefile:並行運行特定目標

[英]Makefile: Running a specific target in parallel

我正在學習 Makefile 並嘗試實現並行性。 我知道“-j”選項。 但是,例如具有以下生成文件(在 Windows 上)-

all: a b c d

a: 
 # some build rule

b:
 # some build rule with parallelism

c:
 # some build rule

d:
 #some build rule 

我正在嘗試運行make all ,只有並行運行的目標“b”。 將 -j 選項與“b”的構建規則一起傳遞不起作用。 任何指針?

您可以讓 b 的配方在后台運行,如下所示:

all: a b c d
        @echo running $@

.PHONY: a b c d all

a c d: | b
        @echo -n _$@0 && \
         sleep 1 && echo -n _$@1 && \
         sleep 1 && echo _$@2

b:
        @(echo -n _$@0 && \
          sleep 2 && echo -n _$@1 && \
          sleep 2 && echo -n _$@2\
         ) &

哪些輸出:

_b0_a0_a1_b1_a2
_c0_c1_b2_c2
_d0_d1_d2
running all

b的僅順序依賴使b首先運行,否則它會在a-j1完成-j1 ……這當然意味着如果您構建a cd ,則必須構建b

或者,(我不建議這樣做)您可以使用一些手動鎖定機制,例如flock來防止 a、c 和 d 並行運行(請注意,flock 僅保護單個外殼,因此您必須折疊將您的食譜放入由羊群保護的單行中,以便此工作)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM