Makefile 依赖中的变量展开问题

2020-12-16 17:16:39 +08:00
 liyongjun0803

Makefile:

TARGET = test1
TARGET += test3

all: $(TARGET)
	@echo $^
	@echo $(TARGET)

test1:
test3:

TARGET += test2

执行结果:

$ make
test1 test3
test1 test3 test2

Makefile 中,等号赋值的变量,会在整个 Makefile 文件展开后,再决定变量的值,如 @echo $(TARGET) 打印 test1 test3 test2 。
但是,不解的是,为什么依赖中的 TARGET 仅仅为 test1 test3 ?

894 次点击
所在节点    问与答
2 条回复
SJ2050cn
2020-12-16 18:04:51 +08:00
make 会先从上向下执行所有没缩进的语句,注意,是从头上下,在执行依赖项的时候,后面的赋值语句还没执行,接着,会执行缩进中的内容,所以你的 @echo $(TARGET)会执行全部赋值完后的结果。我们可以做一个小实验,
```
Ranep = test1
TARGET = $(Ranep) test3


all: $(TARGET)
@echo $^
@echo $(TARGET)
test1:
test2:
test3:

Ranep = test2
```
你可以看看输出结果你就知道了。总之,就是 make 会先执行没缩进的,再执行缩进的。
liyongjun0803
2020-12-17 09:26:24 +08:00
@SJ2050cn 学到了,感谢!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/736087

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX