我想知道如果Makefile中有两个同名目标会发生什么情况:
根据这个问题的回答,有两个同名目标会产生警告。
然而,我不明白openwrt中的这个Makefile是如何工作的:
在
请注意第3行对
通过查看
我看到
根据这个问题的回答,有两个同名目标会产生警告。
然而,我不明白openwrt中的这个Makefile是如何工作的:
在
include/package.mk
文件中:define Build/DefaultTargets
$(if $(QUILT),$(Build/Quilt))
$(if $(USE_SOURCE_DIR)$(USE_GIT_TREE),,$(if $(strip $(PKG_SOURCE_URL)),$(call Download,default)))
$(call Build/Autoclean)
download:
$(foreach hook,$(Hooks/Download),
$(call $(hook))$(sep)
)
请注意第3行对
Download
函数的调用以及第6行对目标download
的定义。通过查看
include/download.mk
中Download
函数的定义:define Download
$(eval $(Download/Defaults))
$(eval $(Download/$(1)))
$(foreach FIELD,URL FILE $(Validate/$(call dl_method,$(URL),$(PROTO))),
ifeq ($($(FIELD)),)
$$(error Download/$(1) is missing the $(FIELD) field.)
endif
)
$(foreach dep,$(DOWNLOAD_RDEP),
$(dep): $(DL_DIR)/$(FILE)
)
download: $(DL_DIR)/$(FILE)
我看到
download
目标被重新定义了。
我知道使用 call
会扩展函数,那么这个怎么能行?