Makefile 在求值时展开变量,而不是赋值

Makefile 在求值时展开变量,而不是赋值,makefile,gnu-make,Makefile,Gnu Make,我在一些make变量方面遇到了问题,我有如下问题: SUFFIX := raw FILENAME = name.$(SUFFIX) ... ... #much later, in a different makefile far away: SUFFIX := img echo $(FILENAME) 但文件名具有原始原始后缀值name.raw,而不是最近分配的img值 我是不是错过了一些简单的东西?使用最新发布的gmake。我无法通过一系列包含复制此错误;这还牵涉到别的事情。我建议您

我在一些make变量方面遇到了问题,我有如下问题:

SUFFIX := raw

FILENAME = name.$(SUFFIX)

...
...

#much later, in a different makefile far away:
SUFFIX := img

echo $(FILENAME)
但文件名具有原始原始后缀值name.raw,而不是最近分配的img值


我是不是错过了一些简单的东西?使用最新发布的gmake。

我无法通过一系列包含复制此错误;这还牵涉到别的事情。我建议您尝试以下方法并告诉我们结果:

@echo filename: $(FILENAME)
@echo origin: $(origin FILENAME)
@echo flavor: $(flavor FILENAME)
编辑: 好了,现在我们知道文件名的定义很简单,就是说,使用:=某处。因此,尝试跟踪包含链,并找出发生的位置。这里有一个技巧:将这些行放在您感兴趣的任何makefile中

ifeq ($(flavor FILENAME),simple)
  $(warning FILENAME is simply defined)
endif

这两个makefile是如何连接的?一个包含另一个,或者调用另一个,或者涉及第三个,或者什么?贝塔:我相信有一系列包含。shell配方存储为递归变量。因此,echo$FILENAME将给出执行配方时的$FILENAME。这是在读取和解析makefiles之后发生的。filename:name.raw origin:file flavor:simple