首页 > 解决方案 > 如果设置,则使用环境变量,否则在 makefile 中使用默认值

问题描述

我可以做这个:

MY_VAR:=$(myvar)

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

就像是:

# pseudo code
MY_VAR:=if not $(myvar) then someDefaultValue

标签: bashmakefile

解决方案


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

生成文件 (1)

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

.PHONY: all

all:
    echo $(MYVAR)

运行如下:

$ make
echo default
default

myvar环境中未定义何时;当它被定义时,运行如下:

$ export myvar=notDefault
$ make
echo notDefault
notDefault

如果环境变量和make变量相同 - 为什么不呢?- 它仍然更简单。

生成文件 (2)

MYVAR ?= default

.PHONY: all

all:
    echo $(MYVAR)

请参见6.5 设置变量

然后:

$ make
echo default
default
$ export MYVAR=notDefault
$ make
echo notDefault
notDefault

推荐阅读