On 22/02/2019 15:18, Jeff King wrote:
> On Fri, Feb 22, 2019 at 03:41:23PM +0100, Ævar Arnfjörð Bjarmason wrote:
>
>> Move the assignment of the "STRIP" variable down to where we're
>> setting variables with the names of other programs.
>>
>> For consistency with those use "=" for the assignment instead of
>> "?=". I can't imagine why this would need to be different than the
>> rest, and 4dc00021f7 ("Makefile: add 'strip' target", 2006-01-12)
>> which added it doesn't provide an explanation.
>
> This might annoy somebody expecting $STRIP in the environment to have
> precedence. But I agree that consistency is probably our best strategy
> here, and I don't see any reason the same argument would not apply to
> $SPATCH, or $CC for that matter.
>
> (So I could see an argument for moving them all to "?=", but that can
> create its own confusion as environment variables accidentally start
> taking effect).
$STRIP and $SPATCH will work OK, but you would be disappointed
with $CC (or any other variable from make's built-in database). ;-)
Try this:
$ cat -n Makefile
1
2 CC ?= gcc
3
4 all:
5 @echo "CC is $(CC), origin " $(origin CC)
6
$
The command-line works OK:
$ make CC=cmd-line
CC is cmd-line, origin command line
$
So does the environment:
$ CC=env make
CC is env, origin environment
$
But that conditional assignment:
$ make
CC is cc, origin default
$
... not so much! :-D
ATB,
Ramsay Jones