gmake环境变量缺失

时间:2016-05-07 15:54:59

标签: variables makefile gnu-make environment

我正在编写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。

你知道为什么这不起作用吗?

1 个答案:

答案 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)

其中,最后一个可能是最不模糊的,也是效率最高的。