获取GNU makefile的包含树

时间:2013-02-27 15:48:09

标签: makefile gnu

在现有的GNU Make构建系统中,我想看到makefile的一个树包含。我怎么能这样做?像Do you know tool building tree of include files in project\file?但是对于GNU Make而不是C和C ++。

我感兴趣的一个相关但略有不同的功能:能够在makefile中放入$(info ...)语句,并打印出该信息语句的包含的回溯。

1 个答案:

答案 0 :(得分:0)

如果你只想要一个包含的makefile列表,那么主makefile底部的$(info Included files: ${MAKEFILE_LIST})符合要求。

但是,如果您确实想要一棵树,那么您必须将所有include <file>替换为$(call include,<file>)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