On Tue, 2017-10-31 at 07:39 +1100, NeilBrown wrote:
> On Mon, Oct 30 2017, Tim Murphy wrote:
> 
> > For my money -j is always a top-level setting.   To have it per makefile
> > and then let makefiles depend on that behaviour would open the door to lots
> > of scary bugs.

I don't see what scary bugs we might have; I've seen issues where
makefiles not intended to be used with -j will not work properly with
-j, but I'm not sure I've ever seen an issue with a makefile intended
to work with -j that fails when run without it, or with a different
value.

> I'm beginning to agree with this perspective.
> The "-j" setting is not really a function of the code, it is a
> function of the hardware that make is being run on.
> So I should set MAKEFLAGS=-j8 in my environment instead of if the
> Makefile.

I definitely agree that's best-practice.  You could also use the
(newer) GNUMAKEFLAGS environment variable which will ensure only GNU
make sees the value (in case you run other versions of make).

> Maybe we just need to change the documentation...

I definitely agree that setting -j inside a makefile is not a good
idea, just like adding -k or -d or whatever.

However people do it and it used to work.

The question is what should make do when it happens?  Silently ignoring
it as now doesn't seem like a winning alternative.

If we see -j in a makefile setting of MAKEFLAGS, we could:

   1. Always silently ignore it (today's behavior).
   2. Always print a message then ignore it.
   3. Treat it the same way as a recipe with $(MAKE) -j: that is, start a
      new jobserver group for this sub-make (and print a message if we're
      already part of a different jobserver group).

Personally I lean towards #3, even if it does allow people to do
bizarre things.

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

Reply via email to