openwrt makefile选项
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个参数