Natim Natim - 1 month ago 12
Bash Question

Define a Makefile variable using a ENV variable or a default value

I am trying to do a simple thing:

TMPDIR ?= /tmp

test:
@echo $(TMPDIR)


This works if I run:

$ make test
/tmp


It also works if I run:

$ make test -e TMPDIR=~/tmp
/home/user/tmp


What can I do to also have it works for:

$ TMPDIR=~/tmp make test
/home/user/tmp

Answer

To follow up on my comments above, here's an example:

T ?= foo
all:;: '$(T)'

Now if I run the various options it behaves as expected (I get foo only if I don't set T either on the command line or environment):

$ make
: 'foo'

$ make T=bar
: 'bar'

$ T=bar make
: 'bar'