Package/ (optional)
由该包安装的配置文件的列表,一行一个文件。
BuildPackage宏
最重要的一个宏是 BuildPackage。它会在 Makefile 的最后一行被引用。它的实现也就是在 package.mk 文件里。如下为其源码:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
define BuildPackage $(Build/IncludeOverlay)
$(eval $(Package/Default)) #定义在package-defaults.mk文件里
$(eval $(Package/$(1))) #调用用户自定义的 Package/<包名> 宏
ifdef DESCRIPTION
$$(error DESCRIPTION:= is obsolete, use Package/PKG_NAME/description)
endif
#检查有没有定义 Package/<包名>/description宏,如果没有定义,则以TITLE默认定义一个
ifndef Package/$(1)/description
define Package/$(1)/description
$(TITLE)
endef
endif
BUILD_PACKAGES += $(1)
$(STAMP_PREPARED): $$(if $(QUILT)$(DUMP),,$(call find_library_dependencies,$(DEPENDS)))
#检查 TITLE, CATEGORY, SECTION, VERSION 是否定义,如果没有定义则报错
$(foreach FIELD, TITLE CATEGORY SECTION VERSION,
ifeq ($($(FIELD)),)
$$(error Package/$(1) is missing the $(FIELD) field)
endif
)
#如果有定义DUMP,那就引入Dumpinfo/Package宏的内部。
#如果没有,那么就引用 Packaget/<包名>/targets里面的每一个target,如果没有定义Packaget/<包名>/targets宏,那么将PKG_TARGETS里的每个target取出来,
#如果也没有定义PKG_TARGETS,那就默认ipkg作为target。将每一个target,引用 BuildTarget/$(target)。
$(if $(DUMP), \
$(Dumpinfo/Package), \
$(foreach target, \
$(if $(Package/$(1)/targets),$(Package/$(1)/targets), \
$(if $(PKG_TARGETS),$(PKG_TARGETS), ipkg) \
), $(BuildTarget/$(target)) \
) \
)
$(if $(PKG_HOST_ONLY)$(DUMP),,$(call Build/DefaultTargets,$(1)))
endef |
总结一下语法:
$() 表示要执行的一条语句
$(if 条件, 成立执行, 失败执行) if条件分支
$(foreach 变量, 成员列表, 执行体) 成员遍历语句
可以看出,语句是可以嵌套使用的。
$(N) 表示第N个参数