2013-05-31 27 views
19

我有一個名爲$ MY_ENV_VARIABLE的環境變量。讀取make文件中的環境變量

如何在我的makefile中使用這個變量來(例如)包含一些源文件?

LOCAL_SRC_FILES = $(MY_ENV_VARIABLE)/libDEMO.so 

上面的東西似乎不起作用。

注意:在我的情況下,這是建立與Android NDK需要,但我想這適用於一般。

+0

它應該工作。你確定變量設置了嗎? – Matthias

+1

@Sander,你聲明的變量應該工作。你也可以嘗試:=而不是=並刪除空格......你是否在make調用中嘗試了-e選項? ,-e:它強制環境變量優先... – nsd

回答

11

確保您從shell中導出變量。運行:

echo $MY_ENV_VARIABLE 

顯示您是否將它設置在您的shell中。但要知道你是否已經導出它,這樣子shell和其他的子命令(如MAKE)可以看到它嘗試運行:

env | grep MY_ENV_VARIABLE 

如果沒有的話,請務必在運行make之前運行export MY_ENV_VARIABLE

這就是你需要做的一切:make在啓動時自動導入所有環境變量作爲變量。

+0

在'csh'中'setenv MY_VAR my_val' – mpen

15

我想補充一些資料...

訪問使環境變量的語法是像進行其他變量...

#export the variable. e.g. in the terminal, 
export MY_ENV_VARIABLE="hello world" 

... 

#in the makefile (replace before call) 
echo $(MY_ENV_VARIABLE) 

這在執行前條命令進行替換。如果不是,要替代的命令執行過程中發生的,你需要躲避$(例如,echo $MY_ENV_VARIABLE是不正確的,將嘗試在代替化妝變量M,並將它添加到Y_ENV_VARIABLE)...

#in the makefile (replace during call) 
echo $$MY_ENV_VARIABLE 
3

我只是(在Cygwin的)一個類似的問題:

  • 運行外殼上印的價值echo $OSTYPE,但
  • 運行env | grep OSTYPE不給任何輸出。

正如我不能保證這個變量是export版上我想運行上生成文件的所有機器,我用下面從生成文件中得到變量:

OSTYPE = $(shell echo $$OSTYPE) 

哪當然也可以在條件中使用如下所示:

ifeq ($(shell echo $$OSTYPE),cygwin) 
# ...do something... 
else 
# ...do something else... 
endif 

編輯:

有些事情,我從jozxyqk's answer的信息後,實驗發現,一切從生成文件中:

  • 如果我運行在一個配方@echo $$OSTYPE@echo "$$OSTYPE",變量成功地擴展到cygwin
  • 但是,在像ifeq ($$OSTYPE,cygwin)ifeq ("$$OSTYPE","cygwin")這樣的條件下使用它不會擴展它。
  • 因此,它是符合邏輯的第一設置變量等TEST = "$$OSTYPE"將導致echo $(TEST)印刷cygwin(膨脹是由echo呼叫完成)但是,這並不在一個條件下工作 - ifeq ($(TEST),cygwin)是假的。