2017-04-14 25 views
1

我有一個makefile,如下爲什麼`?=`(「set if absent」)會導致取消設置環境變量?

.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_TEST兩個值ENV_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環境變量?

+0

僅供參考,如果您從'check'目標運行'env ENV_TEST = $(ENV_TEST)./check.sh',那麼您將不會*出現此問題。 –

+0

謝謝@CharlesDuffy。你對這個問題有什麼想法嗎?爲什麼'?='影響結果? – nghialv

+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