Consider the following contrived Makefile:
.PHONY: all one two
SLEEP = 2
all: one two
one two:
@sleep $(SLEEP)
@echo $@
用
make -j 2 all
运行可以同时完成两项工作,而且时间与单独执行任意一项工作的时间相同,这是因为它们同时进行。如果您控制make的调用并记得每次都这样做,那么效果非常好,但如果您只控制Makefile,则不适用。设置MAKEFLAGS环境变量也可以控制此功能:
$ export MAKEFLAGS="-j 2"
$ make all
然而,在Makefile中设置这个值似乎没有效果:
MAKEFLAGS = -j 2
失败。
export MAKEFLAGS="-j 2"
失败。
设置 JOBS 也似乎没有任何作用。有没有办法控制在 Makefile 中运行的默认作业数?
注意,我知道我可以使用一个虚拟配方并从其中调用递归 make,但这会引入大量混乱,因为我需要为整个可能的目标设置它,并且我正在处理不一定与递归相容的包含 Makefile。
MAKECMDGOALS
中的所有内容定义虚假目标,并使这些目标依赖于包装的调用目标。而且像“-q”之类的东西会破坏,除非你愿意深入分析“MAKEFLAGS”等等。) - Michael Livshin