Makefile 获取GNU生成文件的包含树

Makefile 获取GNU生成文件的包含树,makefile,gnu,Makefile,Gnu,在现有的GNU Make构建系统中,我希望看到makefile includes的树。我该怎么做?但对于GNU而不是C和C++。 我感兴趣的一个相关但稍有不同的功能是:能够将$(info…)语句放入makefile中,并让它打印出该info语句的includes回溯。如果您只想要一个包含的makefiles列表,可以使用$(包含的信息文件:${makefile\u list})在主makefile的底部,与账单相符 但是,如果您确实需要一个树,那么您必须将所有include替换为$(调用incl

在现有的GNU Make构建系统中,我希望看到makefile includes的树。我该怎么做?但对于GNU而不是C和C++。


我感兴趣的一个相关但稍有不同的功能是:能够将$(info…)语句放入makefile中,并让它打印出该info语句的includes回溯。

如果您只想要一个包含的makefiles列表,可以使用
$(包含的信息文件:${makefile\u list})
在主makefile的底部,与账单相符

但是,如果您确实需要一个树,那么您必须将所有
include
替换为
$(调用include,)
include
函数类似于:

space :=
space +=
${space} := ${space}

stack := $(firstword ${MAKEFILE_LIST})

define includefunc
  stack := $(subst ${ },|,$(strip ${MAKEFILE_LIST} $1)) ${stack}
  $(info INCLUDES $(firstword ${stack}))
  include $1
  stack := $(wordlist 2,$(words ${stack}),${stack})
  MAKEFILE_LIST := $(subst |, ,${stack})
endef

include = $(eval $(value includefunc))

$(call include,1.mak)
$(call include,_1/1.mak)
$(call include,folder/Makefile)

.PHONY: all
all: ; echo $@ success

解析
make-d
的输出是否是一个选项?在GNU make的最新版本中,不允许在变量名(
${space}:=${space}
)中使用空格:bobbogo的做法仍然有效;第二,变量名不能再包含空格,除非您将空格放在变量中并使用该变量