这部分ASOP makefile如何工作?

时间:2013-10-21 23:16:36

标签: android makefile gnu-make android-source

我正在尝试修改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。第二个目标有什么意义?

1 个答案:

答案 0 :(得分:2)

dist: ;

只是说,“更新dist目标,什么都不做”。如果没有这个,如果第二部分不存在,Make将不知道如何制作dist。 (实际上这里的“空配方”并不是真正需要的 - 只有特定情况才需要它,而这不是其中之一 - 没有它,你仍然会在这里做“没事”)

如果第二部分存在:

;

表示“更新dist: $(DEFAULT_GOAL) 目标,更新dist

如果两个部分都存在,我们会更新$(DEFAULT_GOAL),然后不再执行任何操作。

一般情况下,对于存在配方的目标,您可以有一个显式规则(此处,配方只是$(DEFAULT_GOAL)),然后您可以在没有配方的情况下拥有其他规则,它们只是建立其他依赖关系注意到。没有含糊不清的执行方法和Make很高兴。