GNU make:make忽略一些导出的变量?

时间:2014-06-19 01:43:55

标签: makefile gnu-make

鉴于此Makefile:

ifndef DEIS_NUM_INSTANCES
    DEIS_NUM_INSTANCES=3
endif

ifndef DEIS_HOSTS
    DEIS_HOSTS = $(shell seq -f "172.17.8.%g" -s " " 100 1 `expr $(DEIS_NUM_INSTANCES) + 99` )
endif

DUMMY:
    for host in $(DEIS_HOSTS); do echo $$host; done

无论我导出DEIS_HOSTS的是什么,始终会评估ifndef DEIS_HOSTS

bash-3.2$ export DEIS_HOSTS="1.2.3.4 2.3.4.5"
bash-3.2$ make
for host in 172.17.8.100 172.17.8.101 172.17.8.102 ; do echo $host; done
172.17.8.100
172.17.8.101
172.17.8.102

但是,将变量直接传递给make似乎有效:

bash-3.2$ DEIS_HOSTS="1.2.3.4 2.3.4.5" make
for host in 1.2.3.4 2.3.4.5; do echo $host; done
1.2.3.4
2.3.4.5

有人可以解释这种行为吗?这很令人困惑,特别是考虑到DEIS_NUM_INSTANCES不能这样做:

bash-3.2$ export DEIS_NUM_INSTANCES=6
bash-3.2$ make
for host in 172.17.8.100 172.17.8.101 172.17.8.102 172.17.8.103 172.17.8.104 172.17.8.105 ; do echo $host; done
172.17.8.100
172.17.8.101
172.17.8.102
172.17.8.103
172.17.8.104
172.17.8.105

1 个答案:

答案 0 :(得分:0)

所以,这很令人尴尬。今天回到这个问题,它按预期工作。我不知道昨天和今天之间发生了什么变化...... Makefile是一样的。无论如何,感谢大家确认我确实疯了!