我正在尝试懒惰地评估配置选项。Make
只有当变量被实际使用(替换)时,我才想发出错误。
考虑以下 Makefile:
VAR = $(error "E")
NFS_DIR = NFS_DIR is $(VAR)
T = $(NFS_DIR) is 1
all:
echo Test
如果我使用我的环境(具有/srv/nfs
价值)运行它,则输出如下:
➜ ~ make
echo Test
Makefile:3: *** "E". Stop.
所以递归定义就像简单定义一样。
如果我清除环境,它会按预期工作:
➜ ~ env -i make
echo Test
Test
我找不到任何提及递归扩展变量,当与环境变量同名定义时,将像简单扩展变量一样。
所以问题是:
- 为什么观察到的行为?
- 如何实现所需的行为?
更新:澄清-我不想使用?=
,因为这些选项是配置选项,我希望它们严格来自 Makefile 而不是来自环境。