如果设置,则使用环境变量,否则在makefile中使用默认值

red*_*888 2 bash makefile

我可以做这个:

MY_VAR:=$(myvar)
Run Code Online (Sandbox Code Playgroud)

但是我要定义的是MY_VAR的值,如果未定义环境变量myvar,则使用该值。这可能吗?

就像是:

# pseudo code
MY_VAR:=if not $(myvar) then someDefaultValue
Run Code Online (Sandbox Code Playgroud)

Mik*_*han 5

假设make是GNU Make,则继承的所有环境变量设置都会make自动注册为make变量设置。请参见环境中的6.10变量。所以你可以写,例如

制作文件(1)

ifdef myvar
MYVAR := $(myvar)
else
MYVAR := default
endif

.PHONY: all

all:
    echo $(MYVAR)
Run Code Online (Sandbox Code Playgroud)

运行方式如下:

$ make
echo default
default
Run Code Online (Sandbox Code Playgroud)

myvar未在环境中定义; 并在定义后运行:

$ export myvar=notDefault
$ make
echo notDefault
notDefault
Run Code Online (Sandbox Code Playgroud)

如果环境变量和make变量相同,为什么不呢?-还是比较简单。

制作文件(2)

MYVAR ?= default

.PHONY: all

all:
    echo $(MYVAR)
Run Code Online (Sandbox Code Playgroud)

请参阅6.5设置变量

然后:

$ make
echo default
default
$ export MYVAR=notDefault
$ make
echo notDefault
notDefault
Run Code Online (Sandbox Code Playgroud)