我有一个名为$ MY_ENV_VARIABLE的环境变量。
如何在makefile中使用此变量(例如)包含一些源文件?
LOCAL_SRC_FILES = $(MY_ENV_VARIABLE)/libDEMO.so
上面的东西似乎不起作用。
注意:在我的情况下,这需要使用Android NDK进行构建,但我想这一般适用于制作。
答案 0 :(得分:15)
只是添加一些信息......
在make中访问环境变量的语法与make ...
中的其他变量类似#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
不正确并将尝试替换make中的变量M
,并将其附加到Y_ENV_VARIABLE
)...
#in the makefile (replace during call)
echo $$MY_ENV_VARIABLE
答案 1 :(得分:11)
确保从shell导出变量。运行:
echo $MY_ENV_VARIABLE
显示它是否在shell中设置。但是要知道你是否已经导出它以便子shell和其他子命令(比如make)可以看到它尝试运行:
env | grep MY_ENV_VARIABLE
如果不存在,请务必在运行make之前运行export MY_ENV_VARIABLE
。
这就是你需要做的所有事情:make会在启动时自动导入所有环境变量作为make变量。
答案 2 :(得分:3)
我刚遇到类似问题(在Cygwin下):
echo $OSTYPE
会打印该值,但env | grep OSTYPE
并未提供任何输出。由于我无法保证在我想运行makefile的所有机器上export
编辑此变量,我使用以下内容从makefile中获取变量:
OSTYPE = $(shell echo $$OSTYPE)
当然也可以在以下条件下使用:
ifeq ($(shell echo $$OSTYPE),cygwin)
# ...do something...
else
# ...do something else...
endif
修改强>
我在尝试使用jozxyqk's answer中的信息后发现的一些内容,都来自makefile:
@echo $$OSTYPE
或@echo "$$OSTYPE"
,则该变量已成功扩展为cygwin
。ifeq ($$OSTYPE,cygwin)
或ifeq ("$$OSTYPE","cygwin")
这样的条件下使用它并不会扩展它。TEST = "$$OSTYPE"
之类的变量会导致echo $(TEST)
打印cygwin
(扩展由echo
调用完成)但是没有&# 39;在条件下工作 - ifeq ($(TEST),cygwin)
是假的。