2016-04-05 56 views
0

我测试了几个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 

当输入使在终端,我得到

$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变量。但是makefile中的显式赋值或命令参数会覆盖环境。

+0

其实我正在测试另一个我在$ HOME/.bash_profile中定义的环境变量。我忘了做出口。如果我回显$ MYVARABLE但不在make内部,该变量是可见的。我在测试伪文件中的环境变量的时候犯了另一个错误,就是通过额外的'$'进行测试。感谢丹的回答。 –

+0

是否有一个原因与此链接到make 3.79.1文档?特别是因为这个链接是一个'old-gnu'网址,并且你正在使用一个**很多更新的make版本呢? (十四年半更新确切。) –

+0

没有特别的理由。我刚刚在谷歌搜索,这是谷歌搜索的第一项。制造商的大多数用户必须是专家,他们不再阅读更新的手册。所以旧版本得到最多的宣传。 –

回答

3

我相信你不应该在ifdef块中得到你的HOME变量的值。 GNU make会将其评估为

ifdef /your/home/directory 

这显然没有被定义为变量。请尝试以下操作:

​​
+0

正确,语法是'ifdef VAR_NAME'而不是'ifdef VAR_VALUE'。有关更多详细信息,请参阅手册中的[条件语法](http://www.gnu.org/software/make/manual/make.html#Conditional-Syntax)。 –

相关问题