I'm aware that the behavior of MAKEFLAGS wrt -j is a little unusual,
however I was still surprised by the result of the following simulation of
a recursive make with -j and haven't found anything in the manual to
support it:

% cat Makefile
level ?= 0
$(info At level $(level) MAKEFLAGS=$(MAKEFLAGS) (info))
all:
@echo "At level $(level) MAKEFLAGS=$(MAKEFLAGS) (recipe)"
ifneq ($(level),2)
@$(MAKE) --no-print level=$(shell expr $(level) + 1)
endif

% make-4.2.1 -j12
At level 0 MAKEFLAGS= (info)
At level 0 MAKEFLAGS= -j12 --jobserver-auth=3,4 (recipe)
At level 1 MAKEFLAGS= --no-print-directory (info)
At level 1 MAKEFLAGS= -j12 --jobserver-auth=3,4 --no-print-directory --
level=1 (recipe)
At level 2 MAKEFLAGS= --no-print-directory (info)
At level 2 MAKEFLAGS= -j12 --jobserver-auth=3,4 --no-print-directory --
level=2 (recipe)

There are two separate issues here: first, that MAKEFLAGS isn't visible at
all in the top level. This I seem to recall reading about before and wasn't
surprised. Second, that -j is hidden, except in recipes, all the way down.
This seems unfortunate and I can't think of why it would be a feature,
though it probably is.

Section 5.7.3 "Communicating Options to a Sub-make" says that -j is a
special case but says nothing about this recipe-vs-internal difference.
Similarly 7.3 "Conditionals that Test Flags" uses MAKEFLAGS as its example
but doesn't say "don't try this with -j". I think both these sections could
use a little verbiage on the topic but I don't want to contribute anything
without understanding the background.

Thanks,
David
_______________________________________________
Bug-make mailing list
Bug-make@gnu.org
https://lists.gnu.org/mailman/listinfo/bug-make

Reply via email to