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