On Thu, 2017-09-28 at 16:28 +1000, NeilBrown wrote: > One of my Makefiles contains > MAKEFLAGS += -j > > Prior to the above commit, this would cause make to run as if I had > run > make -j > > Since that commit, it appears to be ignored.
This is a bug clearly. I've been thinking about it today and I wonder what behavior people would expect to see if there are mismatches between the various ways -j can be specified. If it's a top-level make (not a sub-make in a jobserver grouping) then I think the behavior is pretty straightforward based on normal make priorities: if there's a command line -j setting use that; if not and there's a MAKEFLAGS -j set in the makefile use that; if not and there's a MAKEFLAGS -j set in the environment use that. I don't think make should warn if the different sources have different -j values. You might set MAKEFLAGS=-j5 in your environment or makefile but have "make -j1" to explicitly turn it off--you wouldn't want a message about that IMO. More interesting: what about a sub-make which is part of an existing jobserver group? Consider a sub-make invoked with -jN on the command line; you have a makefile like this: $ cat cmd.mk subdir: ; $(MAKE) -C $@ -j2 If someone runs a simple "make -f cmd.mk", then you'd want the sub-make to be run with -j2 of course. But what if you do this: $ make -f cmd.mk -j4 What happens today is that a _new_ jobserver instance with -j2 is started for the sub-make. This could mean we have 5 total jobs running, even though we specified -j4 on the command line. That seems defensible, although I don't know that it's correct. Now... what about if a sub-make has a MAKEFLAGS variable assignment? Does that override an existing jobserver and cause the current make instance to be the master of a new jobserver group, as if it were set on the command line? For example: $ cat sub.mk MAKEFLAGS += -j3 all: ... $ cat cmd.mk MAKEFLAGS += -j2 subdir: ; $(MAKE) -f sub.mk $ make -f cmd.mk -j4 Here we have a top-level make running the "cmd.mk" file, and a sub-make running the "sub.mk" file. The top make runs with -j4, because the command line overrides the MAKEFLAGS += -j2 in cmd.mk. What about the MAKEFLAGS setting in the sub.mk sub-make? Does it force a new top-level jobserver with jobs set to 3, as if we ran $(MAKE) -j3 in the subdir rule? Or is it ignored (with a warning) if the sub-make is already part of a jobserver group? _______________________________________________ Bug-make mailing list Bug-make@gnu.org https://lists.gnu.org/mailman/listinfo/bug-make