ifndef KBUILD_VERBOSE KBUILD_VERBOSE = 0 ifeq ("$(origin V)", "command line") KBUILD_VERBOSE = $(V) endif endif #ifeq ($(MAKELEVEL),0) ifndef TRACE TRACE:=3>&1 4>&2 endif ifeq ($(MAKELEVEL),$(KBUILD_VERBOSE)) TRACE+=3>/dev/null &>/dev/null endif define make @{ \ echo " MAKE $(1) [$(MAKEFLAGS)]" >&3; \ TRACE_PATH="make[$$(($(MAKELEVEL)+1))]: $(1)\\n$(TRACE_PATH)"; \ $(MAKE) TRACE_PATH="$$TRACE_PATH" --no-print-dir $(1) 2>&4 || \ echo -e "$$TRACE_PATH" >&4; \ } $(TRACE) endef #.NOTPARALLEL: parallel-1 #simple test all: +$(call make, -j 2 parallel-1) parallel-1: a0 a1 a2 a3 a3 a5 a6 a7 a8 a9 parallel-2: b0 b1 b2 b3 b4 b5 b6 b7 b8 b9 %: $@ @sleep 2 @echo "make[$$(($(MAKELEVEL)+1))] -> $*" a5: @echo "forcing -j3" +$(call make,-j 3 parallel-2) a9: $(error foo) a0: @echo "=a0=" a1: @echo "=a1=" .PHONY: %