gpt4 book ai didi

gnu-make - GNU 做出奇怪的行为

转载 作者:行者123 更新时间:2023-12-01 19:19:38 25 4
gpt4 key购买 nike

我有一个简单的 Makefile:

VAR := aaa
include a.inc
VAR += bbb

和a.inc

some_target: $(VAR)
@echo "refer to automatic var $^"
@echo "refer to VAR $(VAR)"

aaa:
bbb:

当我运行 make 时,我看到一个奇怪的打印:

refer to automatic var aaa
refer to VAR aaa bbb

似乎 GNU make 在包含时刻替换了先决条件中的 $(VAR),但在稍后的某个时刻替换了调试打印中的 $(VAR)。这是正确的行为吗?为什么 GNU 以如此不直观的方式做出行为?

最佳答案

这是正确的,而且并不不直观(尽管可能不是立即显而易见的)。

它的工作方式与其他语言中的变量相同。

尝试这个 shell 示例。

$ var=aaa
$ echo "${var}"
aaa
$ ev() { echo "${var}"; }
$ ev
aaa
$ var+=bbb
$ ev
aaabbb

您将获得变量在使用时存在的值。

make 中 tgt: prereq@recipe line 之间的区别在于计算行的时间。

GNU Make Manual3.7 How make Reads a Makefile 中对此进行了讨论。具体来说,对于这种情况,您需要最后一个子部分规则定义

关于gnu-make - GNU 做出奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28168843/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com