makefile 未按预期重用变量

makefile doesn't reuse variables as expected

提问人:Ronald Stanonik 提问时间:11/13/2023 更新时间:11/13/2023 访问量:13

问:

生成文件

SRC := a

first: $(SRC)
        @echo $(SRC)
        @echo "$@ $<"

SRC := b

second: $(SRC)
        @echo $(SRC)
        @echo "$@ $<"

为什么会呼应“b”?

make first
b
first a

谢谢 罗恩

我正在尝试重用 Makefile 中的变量,并期望变量具有最近分配的值。

变量 makefile 可重用性

评论

0赞 Pointy 11/13/2023
Make 处理生成文件的方式与(例如)Python 或 JavaScript 处理源文件的方式不同。
0赞 Tim Roberts 11/13/2023
Makefile 并不像您可能链接的那样线性。它们是“声明性的”。该元素在需要之前不会被替换,这发生在扫描整个文件之后。所有值都将替换为 的最终值。$(SRC)$(SRC)SRC
0赞 MadScientist 11/14/2023
@TimRoberts的评论并不完全正确。诚然,make 变量仅在需要时才会展开,但并非总是在扫描整个文件之后。扩展的规则在 GNU make 手册中有所描述: gnu.org/software/make/manual/html_node/Reading-Makefiles.html 这应该可以解释你看到的行为。

答: 暂无答案