最近我不得不在.bashrc
echo $ JAVA_HOME#打印出/ usr / java /...
回显$(JAVA_HOME)#引发错误“无法找到JAVA_HOME命令”
我担心使用$(JAVA_HOME)
的make文件在$JAVA_HOME
被识别后无效,但不会$(JAVA_HOME)
如何让$(JAVA_HOME)
等于$JAVA_HOME
,这是当前设定的?另外,为什么会这样呢?
感谢
答案 0 :(得分:12)
make
不是bash
他们以不同的方式处理变量。 $foo
是你在bash中读取一个名为 foo 的变量的方式,$(foo)
是你在makefile中读取它的方式。
答案 1 :(得分:5)
更确切地说:
JAVA_HOME
是一个shell变量;假设它已使用export
导出,那么它就是一个环境变量。$JAVA_HOME
是bash
语法,用于展开名为JAVA_HOME
的shell变量。bash
中,$(command)
替换了command
的输出 - 所以$(JAVA_HOME)
正在尝试运行名为JAVA_HOME
的命令,因此出现了错误make
启动时,它会查看每个环境变量并将同名的make
变量设置为相同的值。 (见http://www.gnu.org/software/make/manual/make.html#Environment。)$(JAVA_HOME)
是make
语法,用于展开名为make
的{{1}}变量。因此,JAVA_HOME
应该可以正常运行:Makefile
扩展$(JAVA_HOME)
变量make
,该变量设置为环境变量JAVA_HOME
的值(除非你的JAVA_HOME
故意做了一些事情来覆盖它,否则它具有正确的价值。
答案 2 :(得分:2)
问:我的make文件是否会读取环境 那么变量呢?如果我定义$ JAVA_HOME 在.bashrc中,我的make文件会被读取 $(JAVA_HOME)正确吗?
答:是的,绝对:)
答案 3 :(得分:1)
make会将其变量设置为环境。 (反之则不然。)
答案 4 :(得分:1)
$ JAVA_HOME和$(JAVA_HOME)之间差异的原因很简单,make的变量语法与bash不同。
答案 5 :(得分:1)
...和$ {foo}或$ {HOME},但对于HOME,很少需要。它对于连接是有用的,因为$ {HOME} OFFICE将扩展到我的机器上的/ home / stefanOFFICE,但我不需要它,而$ HOMEOFFICE是完全未知的; $ HOME未扩展。
$ HOME通常是连接的,但是使用斜杠(足以分隔变量),因此$ {HOME} / bin和$ HOME / bin都可以工作。