我有一个名为 $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
不正确并将尝试替换M
make 中的变量,并将其附加到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)
是错误的,这是合乎逻辑的。