我正在使用Linux内核的配置工具Kconfig
来管理我自己项目的配置。
(请有足够代表的人添加“Kconfig”标签或任何更合适的标签)。我没有标记为“linux”或“kernel”,因为我的实际项目不是 Linux 内核。
给出以下配置:
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 的说法并不完全正确。
引用那里的答案:
根据> kernel docs v4.15,不可能对非布尔值使用 select
https://github.com/torvalds/linux/blob/v4.15/Documentation/kbuild/kconfig-language.txt#L104说:
- reverse dependencies: "select" <symbol> ["if" <expr>] [...] Reverse dependencies can only be used with boolean or tristate symbols.
然而这个问题实际上是关于布尔值的,所以从这个角度来看,应该是可能的。可悲的是,我在寻找答案时发现了这个问题。