为什么`?=`(“如果不存在则设置”)导致make取消设置环境变量?

时间:2017-04-14 03:13:54

标签: makefile

我有一个makefile,如下所示

.PHONY: check
check:
    ./check.sh

.PHONY: bar
bar: ENV_TEST ?= bar_env_test
bar:
    echo $(ENV_TEST)

和脚本文件(check.sh

#!/bin/bash

echo $ENV_TEST
echo $ENV_TEST_2

首先,我导出ENV_TESTENV_TEST_2变量的值

export ENV_TEST=env_test
export ENV_TEST_2=env_test_2

然后运行make check并获得以下输出

./check.sh

env_test_2

ENV_TEST_2的值已正确打印,但ENV_TEST的值为空。 我的预期输出是这样的

./check.sh
env_test
env_test_2

有谁知道ENV_TEST环境变量发生了什么?

1 个答案:

答案 0 :(得分:0)

这是响应的一部分

当您将export指令添加到特定于目标的分配时,它就可以了:

check:
    @ ./check.sh

bar: export ENV_TEST ?= bar_env_test
bar:
    @ echo $(ENV_TEST)

.PHONY: check bar

结果:

$ export ENV_TEST=env_test
$ export ENV_TEST_2=env_test_2
$ make check
env_test
env_test_2
$ make bar
env_test
$ unset ENV_TEST
$ make check

env_test_2
$ make bar
bar_env_test