我正在编写Makefile并需要访问HOSTNAME环境变量。 没有任何环境变量可用。这是Makefile:
all:
echo $(HOSTNAME) "b"
输出结果为:
echo "b"
b
我在虚拟机上运行ubuntu 14.04。 gmake版本:
make -v
GNU Make 3.81
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
This program built for x86_64-pc-linux-gnu
是的,设置了HOSTNAME环境变量:
/tmp$ echo $HOSTNAME
ubuntu
/tmp$
此Makefile适用于cygwin。
你知道为什么这不起作用吗?
答案 0 :(得分:0)
HOSTNAME
由Bash设置,但当Make运行shell时,它会调用sh
;即使这是系统上Bash的符号链接,它也会以POSIX模式运行,这会禁用许多特定于Bash的行为。
解决方法0;始终使用导出make
的Bash调用HOSTNAME
。
alias make='export HOSTNAME; make'
解决方法1;
。明确使用Bash代替sh
。
SHELL=/bin/bash
HOSTNAME=$(shell echo "$$HOSTNAME")
解决方法2;明确地调用Bash。
HOSTNAME=$(shell bash -c 'echo $$HOSTNAME')
解决方法3;运行外部命令。
HOSTNAME=$(shell uname -n)
其中,最后一个可能是最不模糊的,也是效率最高的。