既存の GNU Make ビルド システムで、makefile のインクルードのツリーを表示したいと思います。どうすればいいですか?プロジェクト\ファイル内のインクルード ファイルのツール ビルド ツリーを知っていますか? ただし、C および C++ ではなく GNU Make の場合。
私が興味を持っている関連するが少し異なる機能: $(info ...) ステートメントをメイクファイルに入れ、その info ステートメントのインクルードのバックトレースを出力させることができます。
含まれているメイクファイルのリストだけが必要な場合$(info Included files: ${MAKEFILE_LIST})
は、メインのメイクファイルの下部にある が適しています。
ただし、ツリーが必要な場合は、 allinclude <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