Kconfig - 옵션을 "선택"

Kconfig - 옵션을 "선택"

저는 Linux 커널의 구성 도구를 사용하여 Kconfig내 프로젝트의 구성을 관리하고 있습니다.

(충분한 표현을 가진 사람이 "Kconfig" 태그나 더 적절한 태그를 추가해 주세요). 내 실제 프로젝트가 Linux 커널이 아니기 때문에 "linux" 또는 "kernel"로 태그를 지정하지 않았습니다.

다음 구성을 고려하면:

mainmenu "Select/choice interaction test"

# Selectable menu granting access to multiple potentially independent config vars
menuconfig MULTICHOICE
        bool "Multichoice"

config MULTICHOICE_A
        bool "A"
        depends on MULTICHOICE

config MULTICHOICE_B
        bool "B"
        depends on MULTICHOICE

config MULTICHOICE_C
        bool "C"
        depends on MULTICHOICE

# Choose exactly one item
choice CHOICE
        prompt "Choice"

config CHOICE_A
        bool "A"

config CHOICE_B
        bool "B"

config CHOICE_C
        bool "C"


endchoice

# Booleans which restrict/select other options from the previous sections

config SET_A
        bool "Select A"
        select CHOICE_A
        select MULTICHOICE
        select MULTICHOICE_A

config SET_B
        bool "Select B"
        select CHOICE_B
        select MULTICHOICE
        select MULTICHOICE_B

config SET_C
        bool "Select C"
        select CHOICE_C
        select MULTICHOICE
        select MULTICHOICE_C

선택 항목이 menuconfig예상대로 작동합니다. 그러나 설정된 값은 choice아무런 영향을 미치지 않습니다.

choice여기서 잠재적인 문제(충돌)를 이해할 수 있습니다. 다른 구성 변수에 의해 여러 옵션이 암시적으로 선택되면 어떻게 됩니까?

그러나 다른 옵션에 의해 암시적으로 하나의 옵션만 선택된 경우 해당 옵션의 값은 변경되지 않습니다.

예를 들어 nconfig/menuconfig/gconfig/xconfig를 사용하여 위 구성 파일을 연 다음 SET_A//SET_B​​​ 중 하나를 선택합니다 SET_C. 의 가치는 CHOICE전혀 변하지 않았습니다.

옵션 집합에서 하나의 옵션만 선택되도록 하고, 다른 구성 변수가 특정 방식으로 설정된 경우 해당 옵션을 특정 값으로 설정하도록 하는 또 다른 방법이 있습니까?

답변1

답변을 드릴 수 없으므로 Ciro Santilli의 진술이 완전히 정확하지는 않습니다.

거기에 대한 답변을 인용하면 다음과 같습니다.

> 커널 문서 v4.15에 따르면 부울이 아닌 값으로 선택을 사용할 수 없습니다

https://github.com/torvalds/linux/blob/v4.15/Documentation/kbuild/kconfig-언어.txt#L104설명하다:

- reverse dependencies: "select" <symbol> ["if" <expr>] 
  [...]
  Reverse dependencies can only be used with boolean or tristate symbols.

하지만 이 질문은 실제로 부울 값에 관한 것이므로 그런 관점에서는 가능할 것입니다. 안타깝게도 답변을 검색하던 중 이 질문을 발견했습니다.

관련 정보