我有一个名为 $MY_ENV_VARIABLE 的环境变量集。
如何在我的 makefile 中使用这个变量来(例如)包含一些源文件?
LOCAL_SRC_FILES = $(MY_ENV_VARIABLE)/libDEMO.so
像上面这样的东西似乎不起作用。
注意:在我的情况下,这是使用 Android NDK 构建所必需的,但我想这通常适用于 make。
我有一个名为 $MY_ENV_VARIABLE 的环境变量集。
如何在我的 makefile 中使用这个变量来(例如)包含一些源文件?
LOCAL_SRC_FILES = $(MY_ENV_VARIABLE)/libDEMO.so
像上面这样的东西似乎不起作用。
注意:在我的情况下,这是使用 Android NDK 构建所必需的,但我想这通常适用于 make。
只是为了补充一些信息......
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不正确并将尝试替换Mmake 中的变量,并将其附加到Y_ENV_VARIABLE)...
#in the makefile (replace during call)
echo $$MY_ENV_VARIABLE
确保从 shell 中导出了变量。跑步:
echo $MY_ENV_VARIABLE
向您显示它是否已在您的 shell 中设置。但是要知道您是否已将其导出,以便子shell 和其他子命令(如 make)可以看到它尝试运行:
env | grep MY_ENV_VARIABLE
如果它不存在,请确保export MY_ENV_VARIABLE在运行 make 之前运行。
这就是您需要做的所有事情:make 在启动时会自动将所有环境变量导入为 make 变量。
我刚刚遇到了类似的问题(在 Cygwin 下):
echo $OSTYPE会打印该值,但是env | grep OSTYPE不提供任何输出。由于我不能保证这个变量export在我想要运行该 makefile 的所有机器上都被编辑,所以我使用以下命令从 makefile 中获取变量:
OSTYPE = $(shell echo $$OSTYPE)
当然也可以在如下条件下使用:
ifeq ($(shell echo $$OSTYPE),cygwin)
# ...do something...
else
# ...do something else...
endif
编辑:
在尝试了来自jozxyqk 的答案的信息后,我发现了一些东西,所有这些都来自 makefile:
@echo $$OSTYPE或@echo "$$OSTYPE"在配方中,该变量将成功扩展为cygwin.ifeq ($$OSTYPE,cygwin)或ifeq ("$$OSTYPE","cygwin")不扩展它的条件下使用它。TEST = "$$OSTYPE"将导致echo $(TEST)打印cygwin(扩展由echo调用完成)但在某种条件下不起作用 -ifeq ($(TEST),cygwin)是错误的,这是合乎逻辑的。