0

既存の GNU Make ビルド システムで、makefile のインクルードのツリーを表示したいと思います。どうすればいいですか?プロジェクト\ファイル内のインクルード ファイルのツール ビルド ツリーを知っていますか? ただし、C および C++ ではなく GNU Make の場合。

私が興味を持っている関連するが少し異なる機能: $(info ...) ステートメントをメイクファイルに入れ、その info ステートメントのインクルードのバックトレースを出力させることができます。

4

1 に答える 1

1

含まれているメイクファイルのリストだけが必要な場合$(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
于 2013-02-27T19:42:02.090 に答える