The docs提供:
'.EXPORT_ALL_VARIABLES'
只需将其作为目标提及,即可告诉“make”导出
默认情况下,所有变量都传递给子进程。 *注意沟通
子“make”的变量:变量/递归。
然而,以下 makefile 表明,只有通过.EXPORT_ALL_VARIABLES
a phony目标,然后only那么,它会对 makefile 产生预期的效果吗,即导出所有变量。
Makefile(版本 1)是:
ifeq "$(MAKELEVEL)" "0"
foo=bar
.DEFAULT:;
all: .EXPORT_ALL_VARIABLES
@$(MAKE)
else
all:
@echo 'foo is: $(foo)'
endif
运行,我们得到:
make[1]: Entering directory '/home/myname'
foo is:
make[1]: Leaving directory '/home/myname'
Makefile(版本 2)是:
ifeq "$(MAKELEVEL)" "0"
foo=bar
.DEFAULT:;
all: .EXPORT_ALL_VARIABLES
@$(MAKE)
# This line is added in THIS version.
.PHONY: .EXPORT_ALL_VARIABLES
else
all:
@echo 'foo is: $(foo)'
endif
运行,我们得到:
make[1]: Entering directory '/home/myname'
foo is: bar
make[1]: Leaving directory '/home/myname'
现在,这两个版本的 makefile 之间的唯一区别是,在第二个版本中,.EXPORT_ALL_VARIABLES
被伪造了。
为什么需要“虚伪”才能工作?
只要被提及为目标,
为什么需要“虚伪”才能工作?
它不是。你没有声明.EXPORT_ALL_VARIABLES
作为目标,您将其声明为先决条件:
all: .EXPORT_ALL_VARIABLES
这是先决条件,而不是目标。如果您将其声明为目标:
.EXPORT_ALL_VARIABLES:
那么它就会起作用,你不必声明它是假的。
更准确的问题是,为什么声明.EXPORT_ALL_VARIABLES
即使没有将其声明为目标,也将其视为虚假作品?发生这种情况是因为被标记为虚假的事物被假定为目标,即使它们没有明确提及。这可能是也可能不是错误,具体取决于您如何解释其意图.PHONY
.
您最近的问题似乎遵循一种模式:阅读文档,然后编写一个 makefile,该文件执行与文档所述类似但不同的操作,观察它不按描述的方式工作,然后询问为什么不这样做。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)