Zephyr使用Kconfig的Kconfiglib实现,其中包括一些Kconfig扩展:
环境变量中的source语句直接展开,这意味着不需要定义选项 option env="ENV_VAR" 的 "bounce"符号。
注意
从linux4.18开始,C 工具中删除了option env。
引用环境变量的推荐语法是 $(FOO) 而不是 $FOO 。 这将使用新的Kconfig预处理器。扩展环境变量的 $FOO 语法只支持向后兼容。
source 语句支持 glob 模式,并包含每个匹配的文件。至少需要一个样式来匹配一个文件。
端详以下示例:
source "foo/bar/*/Kconfig"
如果样式 foo/bar/*/Kconfig 匹配 foo/bar/baz/Kconfig 和 foo/bar/qaz/Kconfig 文件,则上面的语句等价于以下两个source语句:
source "foo/bar/baz/Kconfig"
source "foo/bar/qaz/Kconfig"
如果没有文件与样式匹配,则生成错误。
接受通配符样式与python glob模块相同。
对于样式不匹配任何文件(或文件名不存在)的情况,可以使用单独的 osource (可选源)语句。如果没有匹配的文件,则osource为 no-op。
注意
source和osource类似于 Make 中的include和-include。
可以使用 rsource 语句来包含用相对路径指定的文件。该路径相对于包含 rsource 语句的 Kconfig 文件的目录。
例如,假设 foo/Kconfig 是Kconfig顶部文件,并且foo/bar/Kconfig有以下语句。
source "qaz/Kconfig1"
rsource "qaz/Kconfig2"
这将包含foo/qaz/Kconfig1和foo/qaz/Kconfig2两个文件。
可以使用 rsource 来创建任意移动的 Kconfig 子树
rsource 还支持glob样式。
rsource的一个缺点是它可能很难找到文件包含在哪里,所以只有在需要的时候才使用它。
可以结合使用osource和rsource的osource语句。
例如,下面的语句将包括来自工作目录的 kconfig1和 Kconfig2(如果它们存在的话) :
orsource "Kconfig[12]"
def_int, def_hex 和 def_string这些关键字是可用的,类似def_bool。它们可以同时设置类型和添加默认值。