2015-02-26 3 views
3

Я реализую пакет buildroot, foo, который не может быть включен вместе с конкретным другим пакетом, баром. Я пытаюсь определить пакеты взаимоисключающими, написав depends on -статей в соответствующих файлах Config.in.Как сделать buildroot пакеты взаимоисключающими?

В 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 

Что такое правильный способ объявления такой взаимоисключающий Нерешенность?

ответ

3

Как видно из этой ошибки, два символа 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 остается видимым.