再帰的にOS Xでパススルーターゲットを作成する

再帰的にOS Xでパススルーターゲットを作成する

clean私はOS X(GNU Make 3.81 - XCodeで)でGNU Makefileの再帰ターゲットを作成しようとしています。 GNU Makeのドキュメントによると、私は次のことを思い出しました:

メインメイクファイル

ALLSUBMAKES=$(wildcard ./*/Makefile)
ALLSUBDIRS=$(patsubst %/Makefile,%,$(ALLSUBMAKES))
.PHONY: submakes clean $(ALLSUBDIRS)

submakes: $(ALLSUBDIRS)

clean: $(ALLSUBDIRS)

$(ALLSUBDIRS):
    $(MAKE) -C $@

サブメイクファイル

mainTarget:
    #do something here

clean:
    #some clean operation

質問:

ターゲットと他のすべてのコマンドラインオプション()を無視し、実行可能ファイルのフルパス名$(MAKE)のみが渡されることがわかりました。最上位レベルでリリースすると、最終的にすべてのサブプロダクションが実行されます。この再帰的なクリーンアップ目標を達成する正しい方法は何ですか?それとも、すべてのコマンドラインパラメータでターゲットをサブプロダクションに渡すにはどうすればよいですか?make-j5mainTargetmake clean

答え1

私が見た方法は、すべてのターゲットを各サブディレクトリに移動する1つのルールとして収集することです。

build clean install:
     @for dir in $(ALLSUBDIRS); do $(MAKE) -C "$$dir" $@; done

MAKEFLAGSサブブランドに自動的にエクスポートされる組み込み変数を使用して操作を実行することもできます。


ターゲットの後に目的のタスクを追加してから、この擬似ターゲットを分割して後でタスクを再抽出できます。

default: $(addsuffix .default,$(ALLSUBDIRS))
clean:   $(addsuffix .clean,$(ALLSUBDIRS))

%.default:
        $(MAKE) -C $*
%.clean:
        $(MAKE) -C $* clean

関連情報