我有一個名爲$ MY_ENV_VARIABLE的環境變量。讀取make文件中的環境變量
如何在我的makefile中使用這個變量來(例如)包含一些源文件?
LOCAL_SRC_FILES = $(MY_ENV_VARIABLE)/libDEMO.so
上面的東西似乎不起作用。
注意:在我的情況下,這是建立與Android NDK需要,但我想這適用於一般。
我有一個名爲$ MY_ENV_VARIABLE的環境變量。讀取make文件中的環境變量
如何在我的makefile中使用這個變量來(例如)包含一些源文件?
LOCAL_SRC_FILES = $(MY_ENV_VARIABLE)/libDEMO.so
上面的東西似乎不起作用。
注意:在我的情況下,這是建立與Android NDK需要,但我想這適用於一般。
確保您從shell中導出變量。運行:
echo $MY_ENV_VARIABLE
顯示您是否將它設置在您的shell中。但要知道你是否已經導出它,這樣子shell和其他的子命令(如MAKE)可以看到它嘗試運行:
env | grep MY_ENV_VARIABLE
如果沒有的話,請務必在運行make之前運行export MY_ENV_VARIABLE
。
這就是你需要做的一切:make在啓動時自動導入所有環境變量作爲變量。
在'csh'中'setenv MY_VAR my_val' – mpen
我想補充一些資料...
訪問使環境變量的語法是像進行其他變量...
#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
我只是(在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)
是假的。
它應該工作。你確定變量設置了嗎? – Matthias
@Sander,你聲明的變量應該工作。你也可以嘗試:=而不是=並刪除空格......你是否在make調用中嘗試了-e選項? ,-e:它強制環境變量優先... – nsd