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 输出 /srcmake Test2 也输出 /src。这一点也不奇怪。 抱歉,回答迟了。但这正是输出应该是/而不是/src的问题。 【参考方案1】:

我找到了问题并进行了修复。 回答我自己的问题: 当分配一个只有等号的变量时,该变量每次都会被强制转换。 我需要添加的是“:”,因此它会被投射一次并根据需要进行设置。 基于此question。

【讨论】:

以上是关于Makefile:包含第二个文件时重铸宏的主要内容,如果未能解决你的问题,请参考以下文章

如何在 makefile 中包含和编译库

编写一个通用的Makefile文件

目标嵌入在包含的Makefile中时找不到目标命令

请教点简单的Makefile文件语法,高手请进

如何自己编写Makefile

Makefile 多目录自动编译