通过 shell 脚本逻辑或本机 make 逻辑在 Makefile 中设置变量,但在环境变量中找不到时分配默认值

通过 shell 脚本逻辑或本机 make 逻辑在 Makefile 中设置变量,但在环境变量中找不到时分配默认值

我有类似下面的代码片段的内容。如何通过 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

相关内容