gmake で、含まれるすべての makefile のリストを取得するにはどうすればよいでしょうか?

gmake で、含まれるすべての makefile のリストを取得するにはどうすればよいでしょうか?

私は別のプロジェクトから継承した、いたるところに makefile が含まれた、非常に混乱した makefile ネットワークを継承しました。全体を壊さずに簡単な変更を加えようとしています (魅力的ではありますが、今は時間がありません)。

gmakeから完全なmakefileを作成する方法はありますか?つまり、すべてのファイルがすでに含まれているのですか? データベースをダンプする方法は知っていますが、読み込まれる無関係なジャンクファイルをすべて追跡するのは同じくらい困難です。

答え1

リメイク非常に興味深いデバッグ出力があります。

答え2

あなたが探しているのは、cc -Eの同等のものですmake。私はそのような同等のものを知りません。外部ツールを使用すると、多くの場合役立ちますが、すべてのケースではありません。二次拡大

しかし、これで一歩近づくことができるかもしれません。最初の Makefile の最後に、次のルールを追加します。

.PHONY: printMakefiles
printMakefiles:
        echo $(MAKEFILE_LIST)

次のコマンドを実行すると、どのMakefileが含まれているかがわかります。

make printMakefiles

条件付きで含まれる可能性があるため、これは 100% 信頼できるわけではないことに注意してください。

答え3

それが再帰的に機能するかどうかはわかりませんが、次のようなものはどうでしょうか:

strace -e trace=open make | grep -i makefile

答え4

Makefile呼び出すmain を編集します。この行を末尾に追加します (少なくともincludeファイル内の最後の行の後に追加します)。

$(info MAKEFILE_LIST == $(MAKEFILE_LIST))

これで、makeこれを実行するとMakefile、ルールをディスパッチする前に、含まれているファイルのリストがダンプされます。

関連情報