簡體   English   中英

使用ENV變量或默認值定義Makefile變量

[英]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 makemake TMPDIR=new/path

你可以做的一件事是:

TMPDIR := "/tmp"

ifdef $$TMPDIR
TMPDIR := $$TMPDIR
endif

test:
    echo $(TMPDIR)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM