一. 前言
该文章所涉及到的知识都来自OpenWrt Wiki官网
二. DEPENDS字段支持的语法
1. +<foo>
表示当前软件包需要依赖于软件包foo,menuconfig时,当前软件包被选上时,软件包foo也会自动被选上。而取消选中当前软件包时,软件包foo是否会被选中由foo原来的选中状态决定。举例如下:
<*> myapp......................... myapp
-*- foo........................... foo
2. <foo>
表示当前软件包需要依赖于软件包foo,menuconfig时,只有当软件包foo被选上时,当前软件包的选项才可见。举例如下
foo选中前:
< > foo......................... foo
foo选中后:
<*> foo......................... foo
< > myapp......................... myapp
3. @FOO
表示当前软件包依赖于配置选项CONFIG_FOO,menuconfig时,除非设置了CONFIG_FOO,否则当前软件包选项将不可见。这个常用来使当前软件包依赖于某个Linux版本或者目标板,例如@TARGET_ramips_mt7620_DEVICE_y1s将使该软件包只适用于ramips_mt7620_DEVICE_y1s目标板。也可以使用布尔表达式来表示复杂的依赖关系,例如 @(!TARGET_FOO||!TARGET_BAR) 将使当前软件包对 foo 和 bar 不可用。
4. +FOO:<bar>
表示如果设置了编译选项CONFIG_FOO,当前软件包依赖于软件包bar,当前软件包被选上时,软件包bar也将自动被选上。典型的应用是:比如当前的软件包有某个选项,选中时,依赖对应的外部库,例如,OpenWrt的base-files的Makefile就有这样的应用。
5. @FOO:<bar>
表示如果当CONFIG_FOO选项被选中时,当前软件包依赖于软件包bar。当CONFIG_FOO被设置,并且软件包bar被选中时,当前软件包才可见。
6. 一些典型的依赖关系配置符号
TARGET_<foo>:表示依赖于Target foo被选择。
TARGET_<foo>_<bar>:表示依赖于Target foo的子Target bar被选择,这是对Target foo的子Target的依赖。
TARGET_<foo>_<bar>_<baz>:这是依赖于Target foo的子目标的子目标了。
LINUX_3_X:依赖于Linux内核的版本是3.x.*。
LINUX_2_6_X:依赖于Linux内核版本是2.6.x.*。
LINUX_2_4:只适用于Linux是2.4的版本。
USE_ULIBC,USE_GLIBC,USE_EGLIBC:依赖于某个种libc。
BROKEN:软件包无法构建或运行,只有在选择 "显示损坏的目标/软件包 "时才会显示。防止意外选择软件包导致构建失败。
IPv6:依赖于系统支持IPv6.
三. PKG_BUILD_DEPENDS
PKG_BUILD_DEPENDS不使用+或@,其他的用法和DEPENDS一样,PKG_BUILD_DEPENDS使用的是PKG_NANE的名称,而不是单个软件包,例如,如果你想让openssl成为依赖,你可以写成PKG_BUILD_DEPENDS:=openssl,而当你的包依赖并选择openssl,你应该写DEPENDS:=+libopenssl,注意,但package下只有openssl。如果是主机需要构建的软件包,则写为PKG_BUILD_DEPENDS:=openssl/host。
四. 总结
本文介绍了OpenWrt package相关的依赖是如何使用的。