HOSTNAME在环境中设置,但对gmake不可见

jco*_*ctx 1 bash makefile environment-variables gnu-make

这困扰了我好多年。谁能解释为什么$(HOSTNAME)不扩展到环境值HOSTNAME?谷歌搜索“ make”,“ hostname”,“ gmake”,“ not set”等等的各种组合对我来说并不富有成果。

jcomeau@intrepid:/tmp$ set | egrep 'HOSTNAME|USER'
HOSTNAME=intrepid
USER=jcomeau
jcomeau@intrepid:/tmp$ cat Makefile 
%.test:
    set | grep $*
%.env:
    echo $($*)
jcomeau@intrepid:/tmp$ make HOSTNAME.test
set | grep HOSTNAME
BASH_EXECUTION_STRING='set | grep HOSTNAME'
HOSTNAME=intrepid
jcomeau@intrepid:/tmp$ make HOSTNAME.env
echo 

jcomeau@intrepid:/tmp$ make USER.test
set | grep USER
BASH_EXECUTION_STRING='set | grep USER'
USER=jcomeau
jcomeau@intrepid:/tmp$ make USER.env
echo jcomeau
jcomeau
Run Code Online (Sandbox Code Playgroud)

cxr*_*reg 7

这是外壳变量和环境变量之间的区别。在测试之前,尝试运行“导出HOSTNAME”,看看有什么区别。

另外,比较“ set”和“ env”之间的输出差异。