OpenWrt之package: Using Dependencies
OpenWrt之package: Using Dependencies
前言
本文我翻译自OpenWrt的文档, 会讲到DEPENDS
, @
, &
, ||
()
的分析, 难免存在部分问题, 欢迎指出, 有英语基础的同学可以直奔官方
https://openwrt.org/docs/guide-developer/dependencies
https://openwrt.org/docs/guide-developer/packages
总览 / Topic
一个package的Makefile包括以下部分:
define Package/tcpdump/default
SECTION:=net
CATEGORY:=Network
DEPENDS:=+libpcap
TITLE:=Network monitoring and data acquisition tool
URL:=http://www.tcpdump.org/
endef
本文将会讲述 DEPENDS:=+libpcap
该行应该是什么样的
依赖类型 / Dependency types
- 除非
libpcap
被选中, 否则tcpdump
不可选
DEPENDS:=libpcap
- 如果
tcpdump
被选中,libpcap
也会被选中
DEPENDS:=+libpcap
- 如果
tcpdump
被选中,arpd也会被选中
. 此时libpcap
才可以被选中, 否则不可选.
DEPENDS:=+PACKAGE_arpd:libpcap
BUSYBOX
中如果没有HOSTNAME
就选中net-tools-hostname
DEPENDS:=+!BUSYBOX_CONFIG_HOSTNAME:net-tools-hostname
- 需存在
USB_SUPPORT
该选项 (被定义), 否则会看不到tcpdump
这个选项
DEPENDS:=@USB_SUPPORT
- 如果
tcpdump
被选中, 会自动配置KERNEL_DEBUG_FS
相关事项 (包括选中).
DEPENDS:=+@KERNEL_DEBUG_FS
注意: 使用opkg install
时不会检查KERNEL_DEBUG_FS
是否被安装
- 如果
net-tools-hostname
没被选中, 就会自动配置BUSYBOX_CONFIG_HOSTNAME
相关事项 (包括选中).
DEPENDS:=+@!PACKAGE_net-tools-hostname:BUSYBOX_CONFIG_HOSTNAME
特别说明 / Special Notes
- 可以在
Makefile
定义一个OpenWrt没有的Package
, 并且在DEPENDS
中调用
define Package/package-name/config
...config stuff
endef
包括以下命令:
命令 | 含义 |
---|---|
select package | 如果tcpdump 被选中, package 也会被选中. |
select package if packageb | 如果packageb 被选中, package 也会被选中 |
select package if SYMBOL | 除非CONFIG_SYMBOL 被定义, 否则package 不可选 |
depends packageb | tcpdump 依赖于packageb , 除非packageb 被选中,否则看不到tcpdump |
depends packageb if packagec | 如果packagec 被选中, tcpdump 会依赖packageb |
select SYMBOL | 如果tcpdump 被选中, 设置为CONFIG_SYMBOL=y . |
select SYMBOL if packageb | 如果packageb 被选中, 执行select SYMBOL 的操作 |
select SYMBOL if SYMBOL2 | 如果SYMBOL2 被定义, 执行select SYMBOL 的操作 |
需要注意的是, 在Package/foo/config
使用select bar
时, 会选中bar
编译, 但是当使用opkg install foo
时, 不需要保证foo
是否被安装
警告 / Caveats
包与包赖之间不能互相依赖 ( Package A
依赖Package B
, Package B
依赖Package A
) , 这种情况是不被允许的, 如果造成这种循环依赖, 在make menuconfig
时会出现其他问题.
使用bool运算符 / Using boolean operators
-
DEPENDS:@SYMBOL
和DEPENDS:@SYMBOL:package
语法上支持if的bool运算符操作, 包括:!
,&&
,||
-
DEPENDS:+SYMBOL:package
语法对bool运算符操作有限制,!
只能针对整个条件.括号
只是为了可读性, 是没有作用的.&&
的优先级高于||
. 所以+(YYY||FOO&&BAR):package
如果当YYY
被选中 或FOO
和BAR
都被选中,package
才可以选. -
+YYY||(FOO&&BAR):package
可读性来说, 可能会更好 -
但是
+(YYY||FOO)&&BAR:package
这种加了括号的情况并不会改变优先级,括号
只是为了可读性, 是没有作用的.
后话
翻译的还是比较水的, 不知道能不能看懂, 起码我自己是懂了.
欢迎关注微信公众号: NueXiniShare
Enjoy it ~