Invoking make like `make FOO=X BAR=Y' causes Make to consider `FOO' and `BAR' as special recursive/deferred variables.
>From GNU Make manual: > all ordinary assignments of the same variable in the makefile are > ignored; we say they have been overridden by the command line > argument. Each one will be appended to twice (matching pattern rules) before being expanded as `$(FOO)' and `$(BAR)'. See https://www.gnu.org/software/make/manual/make.html#Overriding ∎ On the other hand, `env FOO=X BAR=Y make' creates two environment variables which make does not treat as recursive variables. They just always expand to the same value. ∎ HTH, -- Bahman Join the chatter on Matrix: 🌐 https://matrix.to/#/#.mk:matrix.org Subscribe to the Lemmy community: 🌐 https://lemmy.ml/c/makefile On Wed, 2023-09-27 at 08:03 +0200, Markus F.X.J. Oberhumer wrote: > Very stange GNU make behaviour with pattern-specific variables - note > the "X X X" in the output below: > > $ env FOO=X BAR=Y make > FOO='X ' BAR='Y ' > > $ make FOO=X BAR=Y > FOO='X X X' BAR='Y' > > It this really intended? > > ~Markus > > > $ cat Makefile > > default: build/release > > build/%: FOO += > build/%: FOO += > BAR += > BAR += > > build/release: > @echo "FOO='$(FOO)' BAR='$(BAR)'" > > .PHONY: default build/release > > > # END of Makefile > > >