On Thu, Jan 25, 2024 at 12:39 PM Ouellette, Paul <p-ouelle...@ti.com> wrote: > > Hello, > > Consider the following makefiles: > $ cat Makefile > MAKEFLAGS+=VAR=foo > all: > $(info make VAR=$(VAR)) > @echo "env VAR=$$VAR" > $(MAKE) -C lib > $ cat lib/Makefile > all: > @echo "env VAR=$$VAR" > $(info make VAR=$(VAR)) >
Thank you for your report. Variable VAR exists in the make database even with the latest make. However, unlike older make, VAR is not exported. i added variable "world" to your makefile for comparison. $ ls lib makefile $ cat makefile MAKEFLAGS+=VAR=foo world=one #export VAR world all: $(info parent make VAR=$(VAR), world=$(world)) @echo "parent env VAR=$$VAR, world=$$world" $(MAKE) -C lib $ cat lib/makefile all: $(info child make VAR=$(VAR), world=$(world)) @echo "child env VAR=$$VAR, world=$$world" $ ~/src/gmake/make//m64//make --no-print-directory -rp |grep 'VAR = ' VAR = foo $ ~/src/gmake/make//m64//make --no-print-directory -r parent make VAR=foo, world=one parent env VAR=, world= /home/dgoncharov/src/gmake/make//m64//make -C lib child make VAR=, world= child env VAR=, world= If we uncomment the export directive $ cat makefile MAKEFLAGS+=VAR=foo world=one export VAR world all: $(info parent make VAR=$(VAR), world=$(world)) @echo "parent env VAR=$$VAR, world=$$world" $(MAKE) -C lib $ ~/src/gmake/make//m64//make --no-print-directory -r parent make VAR=foo, world=one parent env VAR=foo, world=one /home/dgoncharov/src/gmake/make//m64//make -C lib child make VAR=foo, world=one child env VAR=foo, world=one $ We can see, VAR and world behave the same here. We can also see that the older make would export VAR. MAKEFLAGS is exported by default. We can see, in older make variables defined in MAKEFLAGS were also exported by default. In the latest make variables defined in MAKEFLAGS are not exported by default. Looks like we should restore exporting variables defined in MAKEFLAGS. regards, Dmitry