为啥make无法获取环境变量
Posted
技术标签:
【中文标题】为啥make无法获取环境变量【英文标题】:Why make cannot pick up environment variables为什么make无法获取环境变量 【发布时间】:2016-04-05 21:31:16 【问题描述】:我已经测试了一些 make 并且 shell 中的环境变量问题不在 Make 文件中。我想知道我的设置有什么问题。我在我的 mac os、redhat 和 Ubuntu 上进行了测试。他们都有相同的行为。我想知道任何人都可以帮助解决这个问题。
GNU Make 4.1
这是我最简单的make文件:
ifdef $(HOME)
$(info $$HOME is $(HOME))
else
$(info $$HOME is undefined)
endif
all :
echo do nothing
当我在终端输入 make 时
$HOME is undefined
echo do nothing
do nothing
回声 $HOME
/Users/myusername
这是 make 手册中的定义https://www.gnu.org/software/make/manual/html_node/Environment.html
make 中的变量可以来自 make 运行的环境。 make 在启动时看到的每个环境变量都会转换为具有相同名称和值的 make 变量。但是在 makefile 中的显式赋值,或者使用命令参数,会覆盖环境。
【问题讨论】:
实际上我正在测试我在 $HOME/.bash_profile 中定义的另一个环境变量。我忘了做出口。如果我回显 $MYVARABLE 但不在 make 内部,则该变量可见。我在这里通过给出额外的'$'来测试我的虚拟make文件中的环境变量时犯了另一个错误。感谢丹的回答。 您在这里链接到 make 3.79.1 文档有什么原因吗?特别是因为链接是old-gnu
URL,并且您专门使用了 much 比那更新版本的 make? (确切地说是十四年半。)
没有特别的原因。我刚刚在 google 上进行了搜索,这是 google 搜索中的第一项。肯定是make的大部分用户都是专家,他们不再阅读较新的手册。所以老版本得到了最多的宣传。
可能是因为我之前搜索过它,但我得到了*** GNU make 页面,并且以前从未见过 Google 在该站点上返回任何内容。
【参考方案1】:
我相信您不应该在 ifdef 块中获取 HOME 变量的值。 GNU make 会将其评估为
ifdef /your/home/directory
这显然没有定义为变量。请尝试以下操作:
ifdef HOME
$(info $$HOME is $(HOME))
else
$(info $$HOME is undefined)
endif
【讨论】:
正确,语法是ifdef VAR_NAME
而不是ifdef VAR_VALUE
。有关详细信息,请参阅手册中的Syntax of Conditionals。以上是关于为啥make无法获取环境变量的主要内容,如果未能解决你的问题,请参考以下文章
为啥我不能在 cmd 中设置环境变量。无法使用 azcopy 从 S3 复制