在包含文件中定义之前使用Makefile变量

时间:2015-10-22 09:04:18

标签: makefile

我在Makefile学习冒险中遇到了一些问题。 我准备了两个脚本。第一个是主 Makefile

all:
        @echo $(COMPONENTNAME)

include ~/Projects/tests/mk

这里是 mk 文件

COMPONENTNAME:=ISeeYou

现在,当我跑

make all

我得到了

ISeeYou

我不确定为什么......我确信在使用变量之前必须先定义变量。包含在使用COMPONENTNAME之后。我怀疑是先完成所有包含,然后开始创建目标。是这样的吗?

1 个答案:

答案 0 :(得分:1)

  

我怀疑是先完成所有包含,然后开始创建目标。

是的,你是对的。

在make能够决定应该构建哪些目标(以及以何种顺序)之前,应该完全解析Makefile中的所有全局部分。只有在需要构建目标时才会评估目标的配方。这在make manual中明确说明:

  

制作流程配方的另一种方法是扩展其中的任何变量引用。这在make完成读取所有makefile并且目标被确定为过时之后发生;因此,未重建的目标的配方永远不会扩展。