【问题标题】:Makefile: macro is recast when including second fileMakefile:包含第二个文件时重铸宏
【发布时间】: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的问题。

标签: makefile multiple-makefiles


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-20
    • 2017-04-28
    相关资源
    最近更新 更多