我使用以下代码并行执行目标。现在我想要的是它将并行工作,但最后需要执行一些目标,例如wait
3 个并行运行的进程以完成然后执行另外 2 个进程。我该怎么做?
例如,这里是pack
和cleanup
在module1
之后运行,module2
将并行运行。
NPROCS = $(shell sysctl hw.ncpu | grep -o '[0-9]+')
MAKEFLAGS += -j$(NPROCS)
all: module1 module2
.PHONY: module1
module1:
@echo "run module 1"
DIR=$(PWD)
@echo $(DIR)
.PHONY: module2
module2:
@echo "run module2”
.PHONY:
pack:
pack $(DIR)
cleanup:
gbt clean $(DIR)
这就是先决条件,make
的一大优势。
改变:
pack:
↓
pack: module1 module2
这告诉make
,pack
目标有两个先决条件;module1
和module2
.
这意味着make
在module1
和module2
都完成运行之前不会运行pack
。它们是否并行运行不会有什么不同。
如果你有很多先决条件,你可以把它们放在一个宏中,例如:
modules = module1 module2 …
pack: $(modules)