2

「make dist」後にスクリプトを実行するように AOSP ビルド システムを変更しようとしています。

私はそれをしたいことをするコードを持っています....しかし、私はそれを本当に理解していないので、説明と何が起こっているのか知りたいです. 私が見ているファイルは次のとおりです。

https://android.googlesource.com/platform/build.git/+/master/core/distdir.mk

.PHONY: dist
dist: ;

dist_goal := $(strip $(filter dist,$(MAKECMDGOALS)))
MAKECMDGOALS := $(strip $(filter-out dist,$(MAKECMDGOALS)))
ifeq (,$(strip $(filter-out $(INTERNAL_MODIFIER_TARGETS),$(MAKECMDGOALS))))
# The commandline was something like "make dist" or "make dist showcommands".
# Add a dependency on a real target.
dist: $(DEFAULT_GOAL)
endif

私を混乱させているのは、dist に 2 つの定義があることですが、警告はありません。2 番目の dist: ターゲットにレシピがある場合、dist が再定義されているという警告が生成されます。この 2 番目のターゲットのポイントは何ですか?

4

1 に答える 1

2
dist: ;

「ターゲットを更新distするには、何もしない」と言うだけです。これがなければ、2 番目の部分が存在しない場合、Make は何をどのように作成すればよいかわかりませんdist。(実際、ここの「空のレシピ」;は実際には必要ありません。特定の状況でのみ必要であり、これはその 1 つではありません。それがなければ、ここでは「何も」していないことになります)

2 番目の部分が存在する場合:

dist: $(DEFAULT_GOAL)

つまり、「distターゲットを更新するには、更新します$(DEFAULT_GOAL)

両方の部分が存在する場合は、更新$(DEFAULT_GOAL)してそれ以上何もしません。

一般に、レシピが存在するターゲットに対して明示的なルールを 1 つ持つことができます (ここでは、レシピは単に です;)。次に、レシピを持たない他のルールを持つことができます。それらは、記載されているように追加の依存関係を確立するだけです。どのレシピを実行するか迷いがなく、Makeが楽しいです。

于 2013-10-22T02:07:08.813 に答える