在现有的GNU Make构建系统中,我想看到makefile的一个树包含。我怎么能这样做?像Do you know tool building tree of include files in project\file?但是对于GNU Make而不是C和C ++。
我感兴趣的一个相关但略有不同的功能:能够在makefile中放入$(info ...)语句,并打印出该信息语句的包含的回溯。
答案 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