我正在尝试修改AOSP构建系统,以便在'make dist'之后运行脚本
我的代码可以完成我想要的代码....但我并不真正了解它,并希望得到解释和正在发生的事情。我正在查看的文件是:
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有两个定义:但没有警告。如果我有一个配方到第二个dist:目标它会产生一个警告重新定义dist。第二个目标有什么意义?
答案 0 :(得分:2)
dist: ;
只是说,“更新dist
目标,什么都不做”。如果没有这个,如果第二部分不存在,Make将不知道如何制作dist
。 (实际上这里的“空配方”并不是真正需要的 - 只有特定情况才需要它,而这不是其中之一 - 没有它,你仍然会在这里做“没事”)
如果第二部分存在:
;
表示“更新dist: $(DEFAULT_GOAL)
目标,更新dist
如果两个部分都存在,我们会更新$(DEFAULT_GOAL)
,然后不再执行任何操作。
一般情况下,对于存在配方的目标,您可以有一个显式规则(此处,配方只是$(DEFAULT_GOAL)
),然后您可以在没有配方的情况下拥有其他规则,它们只是建立其他依赖关系注意到。没有含糊不清的执行方法和Make很高兴。