Kconfig和C枚举
我有一个多选菜单,定义如下:Kconfig和C枚举,c,enums,kbuild,C,Enums,Kbuild,我有一个多选菜单,定义如下: menu "Audio" choice prompt "Select Audio Output" default I2S help This option selects the audio output. config AUDIO_OUTPUT_MODE_I2S bool "Generic I2S" config AUDIO_OUTPUT_MODE_I2S_MERUS bo
menu "Audio"
choice
prompt "Select Audio Output"
default I2S
help
This option selects the audio output.
config AUDIO_OUTPUT_MODE_I2S
bool "Generic I2S"
config AUDIO_OUTPUT_MODE_I2S_MERUS
bool "Merus Audio I2S"
config AUDIO_OUTPUT_MODE_DAC_BUILT_IN
bool "Built-In DAC"
endchoice
config AUDIO_OUTPUT_MODE
string
default I2S
default I2S if AUDIO_OUTPUT_MODE_I2S
default I2S_MERUS if AUDIO_OUTPUT_MODE_I2S_MERUS
default DAC_BUILT_IN if AUDIO_OUTPUT_MODE_DAC_BUILT_IN
config DAC_BUG_WORKAROUND
bool "Activate workaround when using Built-In DAC"
endmenu
我想将选择映射到枚举,但Kconfig只有三态和字符串类型,所以我不能这样做,因为AUDIO_OUTPUT_MODE的值是字符串而不是文字:
my_enum = AUDIO_OUTPUT_MODE;
直接使用int可以工作,但有更干净的解决方案吗?在makefile中,您可以将选择作为预处理器定义传递:
CFLAGS-$(CONFIG_CHOICE_A) += -Dchoice=enum_value_a
CFLAGS-$(CONFIG_CHOICE_B) += -Dchoice=enum_value_b
CFLAGS-$(CONFIG_CHOICE_C) += -Dchoice=enum_value_c
然后附加选定的标志:
CFLAGS += $(CFLAGS-y)
然后在本例中作为C代码中的“choice”宏访问它。这是一个有趣的技巧,但我不确定是否要在枚举中引入额外的耦合。我使用了int值,结果是okayish。