| Crates.io | anaxa-builder |
| lib.rs | anaxa-builder |
| version | 0.4.2 |
| created_at | 2026-01-17 13:45:43.665848+00 |
| updated_at | 2026-01-20 14:06:30.282824+00 |
| description | A modern native Rust configuration management system |
| homepage | |
| repository | https://github.com/RainSTR-Studio/anaxa-builder |
| max_upload_size | |
| id | 2050471 |
| size | 52,281 |
现代化的 Rust 原生配置管理系统,旨在替代传统的 Kconfig,使用 TOML 作为 Schema 定义语言。
depends_on 依赖关系,构建依赖图并进行循环检测bool、int、string、hex、choice 等多种配置类型range) 和正则表达式匹配 (regex)cargo run 一样无缝运行,自动注入配置为 Features 和 CFG[menu] 显式定义逻辑层级BuildHelper Fluent API,轻松集成到 build.rscargo install anaxa-builder
在项目目录下创建 Kconfig.toml 文件:
# 示例: src/net/Kconfig.toml
title = "Networking Support"
[[config]]
name = "ENABLE_NET"
type = "bool"
default = true
desc = "Enable networking subsystem"
feature = ["net"] # 对应 Cargo features
[[config]]
name = "SCHEDULER"
type = "choice"
default = "RR"
desc = "Process Scheduler Algorithm"
options = ["RR", "FIFO", "CFS"]
[[config]]
name = "MAX_SOCKETS"
type = "int"
default = 16
depends_on = "ENABLE_NET"
range = [1, 1024]
desc = "Maximum number of open sockets"
[[config]]
name = "DEVICE_NAME"
type = "string"
default = "anaxa-node"
regex = "^[a-z0-9-]+$"
desc = "Device identification name"
# 检查 Schema 有效性并检测循环依赖
cargo anaxa config-check
# 查看解析后的配置结构
cargo anaxa dump
# 启动 TUI 配置界面
cargo anaxa menuconfig
在 TUI 中:
.config无需手动传递复杂的 --features 或 --cfg,直接使用包装命令:
# 自动注入配置并运行
cargo anaxa run
# 自动注入配置并检查
cargo anaxa check
# 自动注入配置并构建
cargo anaxa build --release
这会自动:
.config 中的值bool 类型且开启的选项注入为 Cargo Features (如果指定了 feature 字段)bool 选项注入为 --cfg NAMEANAXA_NAME=VALUEcargo-anaxa CLI 版本与项目 build.rs 中引用的 anaxa-builder 库版本兼容。默认情况下,Anaxa 会按照物理目录结构自动构建配置菜单。如果你的逻辑结构与物理结构不一致(例如想把深层子目录提升到根菜单),可以使用 [menu] 块。
# 根目录 Kconfig.toml
title = "My Project"
[menu]
# 将 src/Kconfig.toml 映射为 "Kernel Core" 菜单
core = "src"
# 将 drivers/net/Kconfig.toml 映射为 "Network Drivers" 菜单
# 即使物理上它在很深的目录,逻辑上它现在是根菜单的直接子项
net_drivers = "drivers/net"
# 任意路径映射
fs = "filesystem/vfs"
这种方式允许你完全解耦物理文件结构和逻辑配置菜单。子模块的 title 依然由其自身的 Kconfig.toml 定义,父模块只负责层级组织。
Anaxa 的解析器支持递归扫描 [menu] 中引用的路径。这意味着:
[menu] 中引用了一个尚未被扫描的目录(例如位于项目根目录扫描范围之外,或者是通过相对路径 ../ 引用的兄弟目录),Anaxa 会自动将其加入扫描队列。[menu]
# 引用外部组件(解析器会自动跳转到该目录进行扫描)
external_lib = "../third_party/lib_foo"
| 类型 | 说明 | 示例 |
|---|---|---|
bool |
布尔值 | true / false |
int |
整数 | 42 |
string |
字符串 | "hello" |
hex |
十六进制 | 0x1A2B |
choice |
单选组 | 从预定义选项中选择 |
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
name |
String | 是 | 配置项名称 |
type |
ConfigType | 是 | 配置类型 (见上) |
default |
Any | 是 | 默认值 |
desc |
String | 否 | 简短描述 |
help |
String | 否 | 详细帮助信息 |
depends_on |
String | 否 | 依赖表达式 |
feature |
Vec |
否 | 对应的 Cargo features |
options |
Vec |
否 | choice 类型的可选值 |
range |
[i64, i64] | 否 | 整数取值范围 |
regex |
String | 否 | 字符串正则表达式约束 |
支持使用 evalexpr 语法的逻辑表达式:
depends_on = "ENABLE_NET && !IPV6_DISABLE"
depends_on = "USE_TLS || USE_SSL"
anaxa-builder/
├── src/
│ ├── tui/ # 交互式终端界面 (Action/Handler/UI 分离架构)
│ ├── codegen/ # 代码生成器(C、Rust、DOT)
│ ├── schema.rs # 配置项数据模型
│ ├── parser.rs # TOML 解析器 (支持显式/隐式映射)
│ ├── graph.rs # 依赖图构建
│ ├── logic.rs # 表达式求值逻辑
│ └── config_io.rs # .config 文件读写
├── generated/ # 生成的代码文件
│ ├── autoconf.h
│ ├── config.rs
│ └── depends.dot
├── Cargo.toml
└── README.md
clapserde + tomlevalexprpetgraphwalkdirratatui + crossterm# 验证 Schema 和依赖
cargo anaxa config-check
# 包装 Cargo 命令(自动注入 Features/CFG/Env)
cargo anaxa run
cargo anaxa check
cargo anaxa build
# 启动交互式配置
cargo anaxa menuconfig
# 生成代码
cargo anaxa generate
配置值的优先级从高到低:
ENABLE_NET=true欢迎提交 Issue 和 Pull Request!
MIT License