再帰的なmakeを使用してツリーを構築するようにmakeをセットアップします。なのでセットアップは
A/Makefile a.c
A/B/Makefile a.c
A/B/C/Makefile a.c
ここで、レベル A/ からコマンドを発行するmake all
と、make はツリーをたどってすべてを構築してから戻ってきます。各 Makefile には、その下に構築するフォルダーのリストが含まれています。ルートに common.inc ファイルがあり、各 Makefile で読み込まれます。
これは、再帰的な make の標準的なレイアウトであり、目新しいものではありません。詳細は多くの場所で提供されています。 hereとhereは例です。
私の質問は次のとおりです。何度もやりたいのですmake all
が、現在のフォルダーにあるものだけをビルドし、実際にツリーを下に移動しないのは、現時点で現在のフォルダーのいくつかの変更をテストしたいからかもしれません。SUBDIRS=A B C
したがって、現在のフォルダーの Makefile を編集して、以下のすべてのフォルダーを一覧表示するか、このフォルダーのみに新しい特別なターゲットを追加してコメントアウトします。どちらもやり続けなければならない面倒なことです。
スイッチを使用して、呼び出されたときにツリーを下に移動する必要があるかどうかを伝える再帰的なメイクファイルのアイデアや小さな例はありますか? コマンドラインで make を呼び出してフラグを渡す方法があるかもしれません。このフラグはSUBDIRS=A B C .....
リストを削除するために使用されるため、現在のフォルダーレベルでのみ停止しますか?
ただ明確にします。ツリー内の各 Makefile に含まれる Rules.mk で標準の SUBDIRS を使用しています。これがその部分です。昔ネットからコピペした
$(SUBDIRS)::
@if test -d $@; then \
set $(EXIT_ON_ERROR); \
echo "cd $@; make $@"; \
cd $@; make $@; \
set +e; \
else \
echo "Skipping non-directory $@..."; \
fi \
$(CLICK_STOPWATCH);
endif
そして、各フォルダー Makefile に書き込みます
SUBDIRS = A B C
include Rules.mk
all:: .......
それから私 make all
はビルドするために書くだけです。LOOPが何らかのmake all LOOP=0
値である場合、それまたはオプションまたは文字列などを渡し、上記のSUBDIRS
ロジックを変更してこの値をチェックし、値にLOOP
基づいて再帰的なmakeを行うかどうかを行う方法がある場合は、問題は解決された。LOOP=1
コマンドラインにない場合、デフォルトは to になります。
しかし、私はこのタイプのロジックをプログラムするのに十分な Make を知りません。