
Package/conffiles (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个参数