OpenWRT软件包Makefile的recursive dependency问题

试验MT7620A路由器OpenWRT系统软件开发时遇到了如下的问题:

[admin@localhost OpenWrt-SDK-ramips-for-linux-x86_64-gcc-4.8-linaro_uClibc-0.9.33.2]$ make
Collecting package info: done
tmp/.config-package.in:7:error: recursive dependency detected!
tmp/.config-package.in:7: symbol PACKAGE_helloworld depends on PACKAGE_libpthread
Config-build.in:1745: symbol PACKAGE_libpthread is selected by PACKAGE_helloworld
#
# configuration written to .config
#
make[1] world
make[2] package/compile
make[3] -C package/helloworld compile
make[2] package/index

看意思是引用的libpthread导致了递归依赖问题,检查hellowolrd中的Makefile,Depends属性是这样设置的:

define Package/helloworld
SECTION:=utils
CATEGORY:=Utilities
TITLE:=Helloworld — prints a snarky message
DEPENDS:=+libuci libpthread
endef

之前只是抄例子,没太注意过一些细节,看到前面uci的depends有一个加号,于是试着在libpthread前也加了个加号,再尝试make defconfig,发现已经不提示递归依赖的错误了,搜索了一下文档,发现在这里:http://wiki.openwrt.org/doc/devel/dependencies有详细的DEPENDS段设置,其中解释了有没有”+”号的区别:
没有任何前缀的时候表示只有选中(安装上)依赖项的时候本包才可以安装,有加号前缀表示如果安装当前包的话会导致依赖包一起选中(安装上)。也就是没有加号时会出现最开始那样的递归依赖结果。

博主友情提示:

如您在评论中需要提及如QQ号、电子邮件地址或其他隐私敏感信息,欢迎使用>>博主专用加密工具v3<<处理后发布,原文只有博主可以看到。