[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: New conditional assignment facility
From: |
Alejandro Colomar |
Subject: |
Re: New conditional assignment facility |
Date: |
Thu, 11 Jan 2024 14:25:25 +0100 |
On Thu, Jan 11, 2024 at 02:22:19PM +0100, Alejandro Colomar wrote:
> Hi Paul!
>
> On Thu, Jan 11, 2024 at 01:44:19AM -0500, Paul Smith wrote:
> > I've implemented a new capability for conditional assignments (not
> > pushed yet).
> >
> > After these changes, a "?" can precede any type of assignment
> > operation, not just "=", and make it conditional (that is, it only
> > takes effect if the variable is not already set).
> >
> > So for example, in addition to "?=" which creates a recursive variable
> > if the variable is not set yet, GNU Make will support "?:=" which
> > creates a simple variable if the variable is not set yet.
>
> Thanks!!
>
> > Of course if
> > it's already set then the right-hand side of the assignment is not
> > expanded.
> >
> > Similarly the assignments "?::=" and "?:::=" are also supported.
> >
> >
> > There is one question I wanted to ask for opinions on: what should we
> > do with the "?+=" operator?
>
> There's a use for it: appending to a variable if it wasn't set in the
> environment (ignoring what happened in the Makefile).
>
> Here's what += does:
>
> alx@debian:~/tmp$ cat Makefile
> var ?= foo
> var += bar
> $(info $(var))
> alx@debian:~/tmp$ make
> foo bar
> make: *** No targets. Stop.
> alx@debian:~/tmp$ make var=foo
> foo
> make: *** No targets. Stop.
> alx@debian:~/tmp$ var=foo make
> foo bar
> make: *** No targets. Stop.
Sorry for reusing "foo". I'll rewrite with quux, which will be clearer.
alx@debian:~/tmp$ cat Makefile
var ?= foo
var += bar
$(info $(var))
alx@debian:~/tmp$ make
foo bar
make: *** No targets. Stop.
alx@debian:~/tmp$ make var=quux
quux
make: *** No targets. Stop.
alx@debian:~/tmp$ var=quux make
quux bar
make: *** No targets. Stop.
>
> And here's what ?+= could do:
alx@debian:~/tmp$ cat Makefile
var ?= foo
var += bar
$(info $(var))
alx@debian:~/tmp$ make
foo bar
make: *** No targets. Stop.
alx@debian:~/tmp$ make var=quux
quux
make: *** No targets. Stop.
alx@debian:~/tmp$ var=quux make
quux
make: *** No targets. Stop.
> alx@debian:~/tmp$ cat Makefile
> var ?= foo
> var ?+= bar
> $(info $(var))
> alx@debian:~/tmp$ make-9000
> foo bar
> make: *** No targets. Stop.
> alx@debian:~/tmp$ make-9000 var=foo
> foo
> make: *** No targets. Stop.
> alx@debian:~/tmp$ var=foo make-9000
> foo
> make: *** No targets. Stop.
>
> In the last case (environment variable), since var was set, ?+= would do
> nothing, unlike +=.
>
--
<https://www.alejandro-colomar.es/>
Looking for a remote C programming job at the moment.
signature.asc
Description: PGP signature
- Re: New conditional assignment facility, (continued)
- Re: New conditional assignment facility, Dmitry Goncharov, 2024/01/22
- Re: New conditional assignment facility, Paul Smith, 2024/01/27
- RE: New conditional assignm ent facility, rsbecker, 2024/01/27
- Re: New conditional assignm ent facility, Paul Smith, 2024/01/27
- RE: New conditional assignm ent facility, rsbecker, 2024/01/27
Re: New conditional assignment facility, Alejandro Colomar, 2024/01/11
- Re: New conditional assignment facility,
Alejandro Colomar <=