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
-j5
mainTarget
make 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