<Y>/<N>/<M> 开关高亮项、? 或 < Help > 查看帮助、/ 搜索,和 Linux 内核 menuconfig 操作习惯一致。
bool / tristate / int / hex / string、choice、depends on、select、多层子菜单与 source 文件包含。
sdkconfig(CONFIG_XXX=y 形式),CMake 正则解析后 add_compile_definitions 即可使用。
ncursesw,标题、菜单、帮助窗口一律按显示列宽居中与截断,中文配置项不会错位,也不会被砍成半个字。
conf 支持 --olddefconfig / --defconfig / --savedefconfig / --allyesconfig 等批处理模式,适合脚本和流水线。
从 Releases 下载 menuconfig-plusplus-<版本>-linux-x86_64.tar.gz,解包后包含 mconf(图形界面)和 conf(命令行):
$ tar -xzf menuconfig-plusplus-*-linux-x86_64.tar.gz $ cd menuconfig-plusplus-* $ ./mconf test/rootconf
依赖只有 C 编译器和 ncurses 开发库:
# Debian / Ubuntu $ sudo apt install -y libncurses-dev cmake ninja-build $ git clone https://github.com/luskyle/menuconfig-plusplus.git $ cd menuconfig-plusplus $ cmake -S . -B build -G Ninja $ cmake --build build
-DDEBUG 与 -DCMAKE_BUILD_TYPE 控制:
默认 DEBUG=ON 生成带调试信息的 Debug 构建,-DDEBUG=OFF 则为 Release;
显式传入 -DCMAKE_BUILD_TYPE=Release 时以你的指定为准。
$ ./mconf test/rootconf
把 test/rootconf 换成你自己的 kconfig 入口文件即可。退出时选择保存,配置写入 sdkconfig。
conf 与图形界面共用同一套解析逻辑,适合放进脚本或 CI:
| 选项 | 说明 |
|---|---|
--oldaskconfig | 以行式问答方式新建配置 |
--oldconfig | 以已有 .config 为基线更新配置 |
--silentoldconfig <file> | 同 --oldconfig 但静默,并把头写入 <file> |
--olddefconfig | 静默更新,新符号取默认值 |
--defconfig <file> | 用 <file> 中定义的默认值生成新配置 |
--savedefconfig <file> | 把当前配置的最小集保存到 <file> |
--allnoconfig | 全部选项取 n |
--allyesconfig | 全部选项取 y |
--allmodconfig | 全部选项取 m |
--alldefconfig | 全部符号取默认值 |
--randconfig | 随机应答所有选项 |
--listnewconfig | 列出新增选项 |
$ ./conf --alldefconfig test/rootconf
configuration written to sdkconfig
# # Automatically generated file; DO NOT EDIT. # Main Menu # CONFIG_GEN_CHOICE1=y # CONFIG_GEN_CHOICE2 is not set CONFIG_STRING_PARAM="" CONFIG_NUM_PARAM=0
读取 sdkconfig 并把 CONFIG_* 转成编译宏(节选,完整版见 README):
file(STRINGS sdkconfig lines NEWLINE_CONSUME)
string(REGEX MATCHALL "(CONFIG[a-zA-Z_0-9]+)=([a-zA-Z0-9\"]+)" result ${lines})
foreach(line ${result})
string(REPLACE "=" ";" pv ${line})
list(GET pv 0 p)
list(GET pv 1 v)
if(v STREQUAL "y")
add_compile_definitions(${p})
else()
add_compile_definitions(${line})
endif()
endforeach()
/ 搜索、Save as 文件名)暂不支持直接键入或编辑中文;界面显示中文已正常。