docs提供:
' .EXPORT_ALL_VARIABLES'
仅仅通过被提及作为目标,这就说明了“制造”。出口 默认情况下,子进程的所有变量。 *注意沟通 变量到子 - ' make':变量/递归。
但是,以下makefile显示只有使.EXPORT_ALL_VARIABLES
为虚假目标,然后仅,才会对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
被伪造了。
为什么' phoniness'为了工作需要吗?
答案 0 :(得分:2)
仅仅被提及为目标,
为什么工作需要“虚假”?
不是。您没有将function name(){...}
声明为目标,您将其声明为先决条件:
.EXPORT_ALL_VARIABLES
这是先决条件,而不是目标。如果您将其声明为目标:
all: .EXPORT_ALL_VARIABLES
那么它将起作用,你不必将它宣布为虚假。
更准确的问题是,为什么将.EXPORT_ALL_VARIABLES:
声称为虚假工作,即使它未被宣布为目标?之所以发生这种情况,是因为被标记为虚假的东西被认为是目标,即使它们没有被明确提及。这可能是也可能不是错误,具体取决于您如何解释.EXPORT_ALL_VARIABLES
的意图。
你最近的问题似乎遵循一种模式:阅读文档,然后编写一个makefile,它与文档所说的内容类似但不一样,观察它不能像描述的那样工作,然后问为什么不。 / p>