4

我正在实现一个 buildroot 包 foo,它不能与特定的其他包 bar 一起包含。depends on我正在尝试通过在各自的文件中编写语句来定义包互斥Config.in

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

声明这种互斥依赖关系的正确方法是什么?

4

1 回答 1

4

如错误所示,两个 Kconfig 符号不可能用depends,select或相互引用if。因此,您必须确保依赖关系朝着一个方向发展。

不幸的是,没有很好的方法来解决这个问题。最简单的方法是将依赖项仅放在两个符号之一上,因此:

config BR2_PACKAGE_FOO
    depends on !BR2_PACKAGE_BAR
config BR2_PACKAGE_BAR
    # No depends on BR2_PACKAGE_FOO

这仍然确保只能选择其中一个,但它是不对称的:当您选择 BAR 时,FOO 将消失,但当您选择 FOO 时,BAR 保持可见。

于 2015-02-28T12:42:53.127 回答