考虑以下设计的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,但这会引入一大堆混乱,因为我需要为一大堆可能的目标设置它,而我是处理包含的Makefiles,它们不一定与递归相配。
在我的Makefile开头设置MAKEFLAGS := -j 2
(注意冒号)。