On Mon, 2024-06-10 at 22:14 +0100, Richard Copley wrote: > What is the correct way to cause jobserver information to be passed > to > child processes? I tried this Makefile: > > all: > @echo Jobserver present? $(filter jobserver,$(.FEATURES)) > +@sh -c "echo \"make toplevel MAKEFLAGS=${MAKEFLAGS}\"" > +@sh -c "echo \"child toplevel MAKEFLAGS=$${MAKEFLAGS}\"" > +$(MAKE) recursive > > recursive: > +@sh -c "echo \"make recursive MAKEFLAGS=${MAKEFLAGS}\"" > +@sh -c "echo \"child recursive MAKEFLAGS=$${MAKEFLAGS}\"" > > # Makefile ends > > The actual output is: > > make -j
This is your problem. When you run "make -j" with no limit, then make doesn't ever create a jobserver. Why create a jobserver when you have an unlimited number of jobs to run? In this case the "-j" flag just tells make to run everything it possibly can with no limits. If you provide a limit you'll see different behavior, e.g.: make -j5