.EXPORT_ALL_VARIABLES仅在制作'假冒

时间:2015-08-09 01:42:01

标签: makefile

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'为了工作需要吗?

1 个答案:

答案 0 :(得分:2)

  
    

仅仅被提及为目标,

  
     

为什么工作需要“虚假”?

不是。您没有将function name(){...}声明为目标,您将其声明为先决条件:

.EXPORT_ALL_VARIABLES

这是先决条件,而不是目标。如果您将其声明为目标:

all: .EXPORT_ALL_VARIABLES

那么它将起作用,你不必将它宣布为虚假。

更准确的问题是,为什么将.EXPORT_ALL_VARIABLES: 声称为虚假工作,即使它未被宣布为目标?之所以发生这种情况,是因为被标记为虚假的东西被认为是目标,即使它们没有被明确提及。这可能是也可能不是错误,具体取决于您如何解释.EXPORT_ALL_VARIABLES的意图。

你最近的问题似乎遵循一种模式:阅读文档,然后编写一个makefile,它与文档所说的内容类似但不一样,观察它不能像描述的那样工作,然后问为什么不。 / p>