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个参数