我在Makefile学习冒险中遇到了一些问题。 我准备了两个脚本。第一个是主 Makefile :
all:
@echo $(COMPONENTNAME)
include ~/Projects/tests/mk
这里是 mk 文件
COMPONENTNAME:=ISeeYou
现在,当我跑
时make all
我得到了
ISeeYou
我不确定为什么......我确信在使用变量之前必须先定义变量。包含在使用COMPONENTNAME之后。我怀疑是先完成所有包含,然后开始创建目标。是这样的吗?
答案 0 :(得分:1)
我怀疑是先完成所有包含,然后开始创建目标。
是的,你是对的。
在make能够决定应该构建哪些目标(以及以何种顺序)之前,应该完全解析Makefile中的所有全局部分。只有在需要构建目标时才会评估目标的配方。这在make manual中明确说明:
制作流程配方的另一种方法是扩展其中的任何变量引用。这在make完成读取所有makefile并且目标被确定为过时之后发生;因此,未重建的目标的配方永远不会扩展。