2016-04-05 53 views
0

我測試了幾個make和有問題的shell中的環境變量不在make文件裏面。我不知道我的設置有什麼問題。我在我的Mac OS,Redhat和Ubuntu上進行了測試。他們都有相同的行爲。我想知道任何人都可以提供幫助。爲什麼不能拿起環境變量

GNU Make 4.1 

這裏是我的簡單的make文件:

ifdef $(HOME) 
$(info $$HOME is $(HOME)) 
else 
$(info $$HOME is undefined) 
endif 

all : 
    echo do nothing 

當輸入使在終端,我得到

$HOME is undefined 
echo do nothing 
do nothing 

回聲$ HOME

/Users/myusername 

這裏是定義從make的手冊https://www.gnu.org/software/make/manual/html_node/Environment.html

make中的變量可能來自運行make的環境。每個啓動時看到的環境變量都會被轉換爲具有相同名稱和值的make變量。但是makefile中的顯式賦值或命令參數會覆蓋環境。

+0

其實我正在測試另一個我在$ HOME/.bash_profile中定義的環境變量。我忘了做出口。如果我回顯$ MYVARABLE但不在make內部,該變量是可見的。我在測試僞文件中的環境變量的時候犯了另一個錯誤,就是通過額外的'$'進行測試。感謝丹的回答。 –

+0

是否有一個原因與此鏈接到make 3.79.1文檔?特別是因爲這個鏈接是一個'old-gnu'網址,並且你正在使用一個**很多更新的make版本呢? (十四年半更新確切。) –

+0

沒有特別的理由。我剛剛在谷歌搜索,這是谷歌搜索的第一項。製造商的大多數用戶必須是專家,他們不再閱讀更新的手冊。所以舊版本得到最多的宣傳。 –

回答

3

我相信你不應該在ifdef塊中得到你的HOME變量的值。 GNU make會將其評估爲

ifdef /your/home/directory 

這顯然沒有被定義爲變量。請嘗試以下操作:

​​
+0

正確,語法是'ifdef VAR_NAME'而不是'ifdef VAR_VALUE'。有關更多詳細信息,請參閱手冊中的[條件語法](http://www.gnu.org/software/make/manual/make.html#Conditional-Syntax)。 –

相關問題