【问题标题】:GNU make - how to determine name + path of makefile from --print-data-base outputGNU make - 如何从 --print-data-base 输出中确定 makefile 的名称 + 路径
【发布时间】:2016-07-07 21:33:49
【问题描述】:

当您执行make all --print-data-base 时,您会在给定的makefile 执行完成后得到这种输出:

...
# default
LINK.o = $(CC) $(LDFLAGS) $(TARGET_ARCH)
# default
OUTPUT_OPTION = -o $@
# environment
QT_INSTALL_PLUGINS = C:/Users/mureadr/Desktop/A/HMI_FORGF/qt5binaries/plugins
# default
COMPILE.cpp = $(COMPILE.cc)
# environment
PATHEXT = .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY;.PYW
# makefile (from 'Makefile', line 1)
MAKEFILE_LIST :=  C:/Users/mureadr/Desktop/A/ImpTarget.mk Makefile
# environment
TMP = C:/Temp
...

当前目录简单地等于CURDIR - 未显示 - 但makefile的名称不是那么简单。

查看6.14 Other Special Variables: MAKEFILE_LIST,答案似乎是:查看MAKEFILE_LIST 的第一个条目,这就是makefile 的名称。但是,如果您通过make all --print-data-base MAKEFILES=MyMake.mk 将makefile 传递给make,那么第一个条目将是MyMake.mk

因此,规则似乎是:查看变量-*-command-variables-*- 并确定是否传入了makefile。如果是,则将其从变量MAKEFILE_LIST 中扣除,其余条目中的第一个字符串是名称的makefile。

问题

是否有任何其他“陷阱”可以在真正的 makefile 前面的 var MAKEFILE_LIST 中插入一些东西?

【问题讨论】:

  • 简短的回答是MAKEFILE_LIST 包含一个以空格分隔的文件名列表,这些文件名是makefile 解析的,按照make 解析它们的顺序。因此,任何导致 make 解析 makefile 的功能都会修改此列表。这包括MAKEFILES 变量、提供给命令行上-f 选项的名称、提供给出现在MAKEFLAGSGNUMAKEFLAGS 变量中的任何-f 选项的名称,以及任何include 指令.这就是我能想到的全部。
  • @MadScientist 从make 的输出中是否可以推断出是否使用MAKEFILES= 传入了任何makefile?这就是我真正需要的。
  • 您的意思是,来自make -p 的输出?为什么不直接检查打印出的MAKEFILES 变量的内容?
  • @MadScientist 问题出在MAKEFILE=,因为如果它用于传入makefile,传入的makefile 会放在MAKEFILE_LIST 的开头,所以我需要一种方法来检测它。用于调用给定 makefile 的命令行是否存储在其 -p 部分中?
  • @MadScientist 在下面查看我的答案。

标签: makefile gnu-make


【解决方案1】:

--print-data-base 输出中查找-*-command-variables-*-,如果它存在并设置变量MAKEFILES - 就像在make all MAKEFILES=thing.mk 中一样 - 那么你知道它设置的任何内容都会首先出现在每个MAKEFILE_LIST 中,即在实际 makefile 的名称之前。

当您与

进行交叉引用时
MAKEFILE_LIST :=  thing.mk Makefile cfg.mk 

您会知道当前 makefile 的名称是 Makefile,之后出现的所有内容都是读入的 makefile,因为它们在顶部是 included。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-17
    • 2015-03-19
    • 2016-12-29
    • 1970-01-01
    • 1970-01-01
    • 2010-09-24
    相关资源
    最近更新 更多