Re: [dev] Special target ".POSIX" in Makefiles

From: Laslo Hunhold <>
Date: Fri, 31 Dec 2021 09:29:52 +0100

On Fri, 31 Dec 2021 12:49:46 +0600
NRK <> wrote:

Dear NRK,

> Hmm, I was under the impression that `?=` was accepted into POSIX.
> But I cannot find any mention of it in the posix manpage (man 1p
> make) so I guess I was wrong.
> What would be a posix replacement for `?=` ? I assume something like:
> VAR = $$(if test -n "$$VAR"; then printf "%s" "$$VAR"; else
> printf "fallback"; fi)
> - NRK

that is exactly what I meant earlier on that the POSIX-intended good
practices get destroyed by the retarded GNU extensions.

"?=" sets a variable only if it doesn't have a value. However, you
really don't need that and should go the other way around by specifying
override variables (those following after "make" in the command line)
instead. They will override any variable within the Makefile.
Alternatively pass the "-e" flag to set all environment variables as
overrides, but this is less clean.
GNU of course complicated it again by _then_ offering an "override"
directive which really really overrides even override variables[0]. I
hate GNU so much.

So what is the replacement? Usually you have a context where e.g. in a you have


and want to "dynamically" override it (e.g. in a build system context)
when the environment already specifies PREFIX, you either do

   make -e

or explicitly set

   make PREFIX=/usr/local

and are bloody done. What more do you want?

It was ingenious by POSIX to really not give in to any stupid
extensions which poison this beautifully simple environment handling.

With best regards


Received on Fri Dec 31 2021 - 09:29:52 CET

This archive was generated by hypermail 2.3.0 : Fri Dec 31 2021 - 09:36:07 CET