【问题标题】:Read environment variable in make file在make文件中读取环境变量
【发布时间】:2013-05-27 00:50:50
【问题描述】:

我设置了一个名为 $MY_ENV_VARIABLE 的环境变量。

如何在我的 makefile 中使用这个变量来(例如)包含一些源文件?

LOCAL_SRC_FILES = $(MY_ENV_VARIABLE)/libDEMO.so

上面的方法似乎不起作用。

注意:在我的情况下,这是使用 Android NDK 构建所必需的,但我想这通常适用于 make。

【问题讨论】:

  • 它应该可以工作。你确定变量设置了吗?
  • @Sander ,您声明的变量应该可以工作。您也可以尝试 := 而不是 = 并删除空格...您是否在 make 调用中尝试过 -e 选项? , -e :它强制环境变量优先...

标签: android-ndk makefile


【解决方案1】:

确保从 shell 中导出了变量。运行:

echo $MY_ENV_VARIABLE

显示它是否在你的 shell 中设置。但是要知道您是否已将其导出,以便子shell 和其他子命令(如 make)可以看到它,请尝试运行:

env | grep MY_ENV_VARIABLE

如果不存在,请确保在运行 make 之前运行 export MY_ENV_VARIABLE

这就是你需要做的所有事情:make 在启动时会自动将所有环境变量导入为 make 变量。

【讨论】:

  • csh 中是setenv MY_VAR my_val
【解决方案2】:

只是补充一些信息...

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 中,并将其附加到 @987654325 @)...

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

【讨论】:

    【解决方案3】:

    我刚刚遇到了类似的问题(在 Cygwin 下):

    • 在 shell 上运行 echo $OSTYPE 会打印该值,但是
    • 运行 env | grep OSTYPE 不会提供任何输出。

    由于我不能保证这个变量在我想要运行该 makefile 的所有机器上都是 exported,所以我使用以下命令从 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 调用完成)是合乎逻辑的,但这在条件下不起作用 - @987654336 @ 是假的。

    【讨论】:

      猜你喜欢
      • 2017-03-06
      • 2012-02-08
      • 2014-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-09
      相关资源
      最近更新 更多