Skip to content

viys/embedded_project_container

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Embedded Project Container

基于 Rust + ratatui 的终端交互工具(TUI),用于快速创建和配置嵌入式 C 的 CMake 工程。


功能特性

  • 新建项目 — 交互式填写配置后一键生成标准 CMake 工程骨架
  • 打开已有项目 — 解析 cmake/config.cmake,支持编辑所有 set() 变量
  • 基本配置 — 项目名、MCU 型号、工具链前缀、构建类型
  • 编译选项 — 管理 COMPILE_FLAGS 列表(增删)
  • 链接配置 — 指定链接脚本路径
  • 编译宏 — 管理 COMPILE_DEFINITIONS 列表(增删)
  • 自定义变量 — 展示并编辑 config.cmake 中的未知变量(如 Telink 私有宏)
  • 构建 — 调用系统 cmake 完成配置 + 编译,输出日志实时滚动显示

生成的项目结构

<project_dir>/
├── CMakeLists.txt              # 通用根 CMake,自动引入配置和工具链
├── cmake/
│   ├── config.cmake            # 所有可配置变量(唯一需要手动维护的文件)
│   ├── toolchain.cmake         # 根据 TOOLCHAIN_PREFIX 自动生成的工具链配置
│   └── functions.cmake         # check_vars() 等辅助函数
└── src/
    └── main.c                  # 空白入口文件

config.cmake 示例:

set(PROJECT_NAME      my_project)
set(MCU_CORE          cortex-m4)
set(TOOLCHAIN_PREFIX  arm-none-eabi-)
set(BUILD_TYPE        Debug)
set(LINKER_SCRIPT     "")
set(COMPILE_FLAGS
    -Wall
    -O2
    -ffunction-sections
)
set(COMPILE_DEFINITIONS
    NDEBUG
)

TUI 界面

┌─ Embedded Project Container ──────────────────────────────────┐
│ 菜单 (22列)           │ 基本配置                               │
│──────────────────────│────────────────────────────────────── │
│  新建项目              │  项目名称      [my_project          ] │
│  打开项目              │  MCU型号       [cortex-m4           ] │
│  ────────────         │  工具链前缀    [arm-none-eabi-      ] │
│ >基本配置              │  构建类型      [Debug               ] │
│  编译选项              │  链接脚本      [                    ] │
│  链接配置              │                                       │
│  编译宏               │                                       │
│  自定义变量            │                                       │
│  ────────────         │                                       │
│  构建                  │                                      │
│  退出                  │                                      │
│──────────────────────┴────────────────────────────────────── │
│ [↑↓] 导航  [Enter] 编辑  [s] 保存  [a] 新增  [d] 删除  [q] 退出│
└───────────────────────────────────────────────────────────────┘

快捷键

按键 说明
/ 菜单导航 / 列表项选择
Enter 进入编辑 / 确认
Tab 切换到下一个字段
Esc 取消编辑
a 在列表中新增条目
d 删除选中条目
s 保存配置到 config.cmake
q / Ctrl-C 退出程序

环境要求

Rust 工具链

推荐使用 GNU 工具链(避免依赖 MSVC + Windows SDK):

# 安装 64-bit MinGW-w64(Scoop 方式)
scoop install mingw

# 或 MSYS2 方式
# pacman -S mingw-w64-x86_64-gcc

# 切换 Rust 默认工具链
rustup default stable-x86_64-pc-windows-gnu

注意:如果在 Git Bash 下使用 MSVC 工具链,/usr/bin/link.exe(GNU coreutils) 会遮蔽 MSVC 的链接器,导致链接失败。切换为 GNU 工具链可彻底规避此问题。

也可以继续使用 MSVC 工具链,但需要确保:

  1. Visual Studio 已安装 "Desktop development with C++" 工作负载
  2. 勾选 Windows 11 SDK 组件
  3. 通过 "x64 Native Tools Command Prompt" 或在 PATH 中正确配置好 MSVC 链接器

嵌入式工具链

工具链由用户自行安装并配置 PATH,TUI 只负责管理 config.cmake 内容。 例如 ARM Cortex-M 项目:

# Scoop
scoop install gcc-arm-none-eabi

# 或从 ARM 官网下载并解压,将 bin/ 目录加入 PATH

CMake

# Scoop
scoop install cmake

# 或从 https://cmake.org/download/ 安装

构建 & 运行

git clone https://github.com/viys/embedded_project_container
cd embedded_project_container

cargo build --release
cargo run

使用流程

新建项目

  1. 启动 TUI,选择「新建项目」
  2. 输入项目目录路径(如 C:/workspace/my_fw
  3. TUI 自动生成项目骨架并跳转到「基本配置」
  4. 填写 MCU 型号、工具链前缀等信息
  5. s 保存到 cmake/config.cmake

打开已有项目

  1. 选择「打开项目」
  2. 输入包含 cmake/config.cmake 的项目根目录路径
  3. TUI 自动解析配置,已知变量填入对应面板,未知变量显示在「自定义变量」中

构建

  1. 选择「构建」(或在菜单上导航至「构建」后按 Enter
  2. TUI 依次执行 cmake -S . -B buildcmake --build build
  3. 输出日志在右侧面板滚动显示,错误行以红色高亮

项目结构(源码)

src/
├── main.rs     # 终端初始化、panic hook、事件循环、退出清理
├── app.rs      # App 状态、Screen/InputMode 枚举、按键处理逻辑
├── ui.rs       # ratatui 渲染(布局、各面板)
└── cmake.rs    # config.cmake 解析/写入、项目文件生成

License

MIT

About

A Rust-powered framework to scaffold embedded C projects, with optional support for CMake, Kconfig, Doxygen, and more. Actively under development.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages