Makefile:包含第二个文件时重铸宏
Posted
技术标签:
【中文标题】Makefile:包含第二个文件时重铸宏【英文标题】:Makefile: macro is recast when including second file 【发布时间】:2017-12-06 13:08:41 【问题描述】:我有一个包含两个这样的 make 文件:
$ cat /src/Makefile
include ../rules.mk
Test:
echo $(DIST_ROOT)
include src.base.mk
Test2:
echo $(DIST_ROOT)
. PHONY: Test Test2
$ cat /rules.mk
DIST_ROOT = $(abspath $(dir $(lastword $(MAKEFILE_LIST))))
$ cat /src/src.base.mk
srcdir = $(DIST_ROOT)/src
问题是两者的输出都是/src
,但它应该是/
。
这是怎么发生的,我该如何解决?
【问题讨论】:
在Test2
食谱中你真的回应$(DIST_ROOT)
吗?不是$(srcdir)
吗?当你写/src
时,不是/src/src.base.mk
吗?而且(看起来很明显,但您没有指定这一点)您是否从/src
调用make?还有你的Phony
,不是.PHONY
吗?
@RenaudPacalet 是的,抱歉。我在我的智能手机上提示了这个。但第二个配方确实是“echo $(DIST_ROOT)”。
无法重现。 make Test
输出 /src
和 make Test2
也输出 /src
。这一点也不奇怪。
抱歉,回答迟了。但这正是输出应该是/而不是/src的问题。
【参考方案1】:
我找到了问题并进行了修复。 回答我自己的问题: 当分配一个只有等号的变量时,该变量每次都会被强制转换。 我需要添加的是“:”,因此它会被投射一次并根据需要进行设置。 基于此question。
【讨论】:
以上是关于Makefile:包含第二个文件时重铸宏的主要内容,如果未能解决你的问题,请参考以下文章