如何使 buildroot 包互斥?
How do I make buildroot packages mutually exclusive?
我正在实施一个 buildroot 包 foo,它不能与特定的其他包 bar 一起包含。我试图通过在各自的 Config.in
-files.
中编写 depends on
-statements 来定义相互排斥的包
在foo/Config.in
中:
config BR2_PACKAGE_FOO
depends on !BR2_PACKAGE_BAR
...
在bar/Config.in
中:
config BR2_PACKAGE_BAR
depends on !BR2_PACKAGE_FOO
...
这导致 make menuconfig
行为异常并给出以下错误消息:
package/foo/Config.in:1:error: recursive dependency detected!
package/foo/Config.in:1: symbol BR2_PACKAGE_FOO depends on BR2_PACKAGE_BAR
package/bar/Config.in:1: symbol BR2_PACKAGE_BAR depends on BR2_PACKAGE_FOO
声明这种互斥依赖的正确方法是什么?
如错误所示,两个 Kconfig 符号不可能通过 depends
、select
或 if
相互引用。所以你必须确保依赖关系是朝着一个方向发展的。
不幸的是,没有很好的方法来解决这个问题。最简单的是只依赖两个符号之一,所以:
config BR2_PACKAGE_FOO
depends on !BR2_PACKAGE_BAR
config BR2_PACKAGE_BAR
# No depends on BR2_PACKAGE_FOO
这仍然确保只有其中一个可以被 selected,但它是不对称的:当你 select BAR 时,FOO 会消失,但是当你 select FOO 时, BAR 保持可见。
我正在实施一个 buildroot 包 foo,它不能与特定的其他包 bar 一起包含。我试图通过在各自的 Config.in
-files.
depends on
-statements 来定义相互排斥的包
在foo/Config.in
中:
config BR2_PACKAGE_FOO
depends on !BR2_PACKAGE_BAR
...
在bar/Config.in
中:
config BR2_PACKAGE_BAR
depends on !BR2_PACKAGE_FOO
...
这导致 make menuconfig
行为异常并给出以下错误消息:
package/foo/Config.in:1:error: recursive dependency detected!
package/foo/Config.in:1: symbol BR2_PACKAGE_FOO depends on BR2_PACKAGE_BAR
package/bar/Config.in:1: symbol BR2_PACKAGE_BAR depends on BR2_PACKAGE_FOO
声明这种互斥依赖的正确方法是什么?
如错误所示,两个 Kconfig 符号不可能通过 depends
、select
或 if
相互引用。所以你必须确保依赖关系是朝着一个方向发展的。
不幸的是,没有很好的方法来解决这个问题。最简单的是只依赖两个符号之一,所以:
config BR2_PACKAGE_FOO
depends on !BR2_PACKAGE_BAR
config BR2_PACKAGE_BAR
# No depends on BR2_PACKAGE_FOO
这仍然确保只有其中一个可以被 selected,但它是不对称的:当你 select BAR 时,FOO 会消失,但是当你 select FOO 时, BAR 保持可见。