[英]Define a Makefile variable using a ENV variable or a default value
我想做一件簡單的事情:
TMPDIR ?= /tmp
test:
@echo $(TMPDIR)
這有效,如果我運行:
$ make test
/tmp
如果我運行它也有效:
$ make test -e TMPDIR=~/tmp
/home/user/tmp
我還能做些什么呢?
$ TMPDIR=~/tmp make test
/home/user/tmp
為了跟進我上面的評論,這是一個例子:
T ?= foo
all:
: '$(T)'
現在,如果我以各種方式運行Makefile,它的行為與我們預期的一樣(只有在命令行或環境中不設置T
才會得到foo
):
$ make
: 'foo'
$ make T=bar
: 'bar'
$ T=bar make
: 'bar'
make命令行中指定的變量會覆蓋makefile中指定的值 :
TMPDIR := "/tmp"
test:
@echo $(TMPDIR)
然后:
make TMPDIR=whatever
whatever
makefile依賴於環境變量通常是不好的做法,這就是首選在make命令行中傳遞變量的原因。
另一種方法是使用make or
function:
X := $(or ${X},${X},abc)
all :
@echo ${X}
make
abc
X=def make
def
實際上,你應該堅持使用?=
賦值。
這是一個簡單的解決方案:
SHELL := env TMPDIR=$(TMPDIR) $(SHELL)
TMPDIR ?= "/tmp"
all:
@echo $(TMPDIR)
適用於兩種情況: TMPDIR=new/path make
和make TMPDIR=new/path
。
你可以做的一件事是:
TMPDIR := "/tmp"
ifdef $$TMPDIR
TMPDIR := $$TMPDIR
endif
test:
echo $(TMPDIR)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.