我有类似下面的代码片段的内容。如何通过 shell 脚本逻辑在 Makefile 中正确设置未定义的 ENV 变量?当脚本运行时环境变量已经在环境中定义时,一切似乎都可以工作,但如果没有,它不会将其设置为默认值(保持为空/未设置)。
我更愿意做类似的事情FROM_ENV_VAR=${FROM_ENV_VAR:-"default value"}
,但是 Makefile 语法是否有类似于从其他 ENV var 设置变量(当然可以是相同的 var)的内容,否则为其分配默认值。
MAKE_VAR=fromake
.PHONY: trial
trial:
if [ -z ${FROM_ENV_VAR} ]; then \
FROM_ENV_VAR="defaulting"; \
echo "setting VAR since not defined from ENV, val: ${FROM_ENV_VAR}"; \
echo "and make's VAR is ${MAKE_VAR}, from shell script"; \
else \
echo "using ENV VAR's defined value: ${FROM_ENV_VAR}"; \
echo "and make's VAR is ${MAKE_VAR}, from shell script"; \
fi
echo "in make, make var is $(MAKE_VAR)"
echo "in make, shell var is $(FROM_ENV_VAR)"
答案1
您可以使用条件变量赋值运算符?=
,它只会设置尚未定义的变量。欲了解更多信息,请参阅底部这手册中的页面make
。
例如,使用以下 Makefile:
MYVAR?=Set by make
.PHONY: all
all:
@echo ${MYVAR}
您将得到以下结果:
$ make
Set by make
$ MYVAR="Set on the command line" make
Set on the command line