Keil 转 CMake 工具
Keil 转 CMake 工具
当前项目用于读取 Keil uvprojx 工程文件,提取目标芯片、源文件、头文件目录、宏定义、编译参数、链接参数与 RTE 组件信息,并生成可供 CMake 与 VS Code 使用的工程文件。
当前仓库同时提供图形界面与命令行入口,二者共用 keil_to_cmake.py 中的解析与生成核心。生成结果既支持 Keil MDK ArmClang,也支持 GNU Arm Embedded GCC,并可按配置输出 VS Code 的构建任务与调试配置。
开源地址
https://github.com/Eitan-Su/keil_translate_cmake
主要能力
- 解析
uvprojx中的目标名称、输出文件名、设备型号、厂商信息与 CPU 描述。 - 收集工程中的源文件、头文件目录、显式包含目录与预处理宏。
- 读取 Keil RTE 信息,并从 PDSC 文件中补入相关源文件与目录。
- 生成
CMakeLists.txt、工具链文件、构建脚本与.vscode配置。 - 为 GCC 场景补充启动文件转换、链接脚本推断、产物导出与调试器配置。
- 支持 OpenOCD、J-Link、PyOCD、Keil MDK 等调试后端枚举。
当前支持情况
当前代码对以下两类目标处理较完整:
| 目标系列 | 当前状态 | 说明 |
|---|---|---|
STM32F103 |
支持较完整 | 包含 F1 宏推断、ARMASM 启动文件转 GNU 汇编、core_cm3.c 修补、回退链接脚本生成、OpenOCD 默认目标脚本 |
AT32F415 |
支持较完整 | 包含 MDK 启动文件切换到 GCC 版本、.ld 文件推断、ArteryTek OpenOCD 默认目标脚本、J-Link 与 ST-Link 配置生成 |
其他系列通常可以完成基础转换,但编译参数、启动文件、链接脚本、器件宏、OpenOCD 配置与 J-Link 设备名常需补充规则。
目录说明
| 文件 | 作用 |
|---|---|
main.py |
PySide6 图形界面入口 |
keil_to_cmake.py |
工程解析与 CMake 生成核心 |
get_keil_mdk_info.py |
Keil MDK 安装目录与 TOOLS.INI 信息读取 |
config.ini |
图形界面配置保存文件 |
keil_to_cmake_guide.html |
当前仓库的详细介绍文档 |
AC7916.html |
页面结构参考模版 |
运行方式
图形界面
执行:
python main.py
界面中可选择以下内容:
uvprojx工程文件- Keil MDK 安装目录
- 输出目录
- 编译器
- 宿主系统
- CMake Generator
- 硬件探针
- 调试后端
- 构建目录
勾选“生成 VS Code 配置”后,输出目录中会新增 .vscode 相关文件。
命令行
示例:
python keil_to_cmake.py project.uvprojx `
--compiler gcc `
--host-os windows `
--generator Ninja `
--debug-probe stlink `
--debug-backend openocd `
--build-dir build-gcc `
--export-vsc-settings `
--destination D:\output\demo
常用参数:
| 参数 | 作用 |
|---|---|
--compiler |
选择 armclang 或 gcc |
--host-os |
选择 windows、linux、macos |
--generator |
指定 CMake Generator |
--debug-probe |
指定探针类型 |
--debug-backend |
指定调试后端 |
--build-dir |
指定构建目录名称 |
--export-vsc-settings |
输出 .vscode 配置 |
--destination |
指定输出目录 |
--uv4-path |
指定 Keil MDK 安装目录 |
生成结果
典型输出目录结构如下:
output/
├─ CMakeLists.txt
├─ do_build.bat 或 do_build.sh
├─ cmake/
│ ├─ armclang.cmake
│ ├─ arm-none-eabi-toolchain.cmake
│ ├─ generated_linker.ld
│ ├─ startup_xxx_gcc.S
│ └─ core_cm3_gcc.c
└─ .vscode/
├─ settings.json
├─ tasks.json
├─ launch.json
├─ c_cpp_properties.json
├─ jlink_flash_elf.jlink
├─ jlink_flash_hex.jlink
└─ jlink_flash_bin.jlink
GCC 模式下,任务配置中通常会包含以下项目:
Configure GCC DebugBuild GCC DebugRebuildFlash ST-Link ELFFlash ST-Link HEXFlash ST-Link BINStart ST-Link OpenOCD GDB ServerFlash J-Link ELFFlash J-Link HEXFlash J-Link BIN
详细文档
当前仓库已经补入 HTML 形式的详细介绍文档:
keil_to_cmake_guide.html
该文档包含以下内容:
- 模块结构
- 处理顺序
- GUI 与 CLI 说明
- VS Code 配置说明
STM32F103与AT32F415的适配依据- 其他系列的主要修改位置
- 关键函数索引
参考资料
当前项目参考了 uvprojx2cmake 的基础思路与工程方向:
https://gitee.com/quincyzh/uvprojx2cmake
参考关系主要体现在以下方面:
- 目标一致,均围绕 Keil
uvprojx到 CMake 的工程转换。 - 生成文件命名与整体思路存在明显关联,例如当前代码中的生成头注释仍保留了
keil_uvprojx2cmake.py的历史命名痕迹。 - 当前仓库在此基础上增加了图形界面、Keil MDK 自动发现、VS Code
tasks.json与launch.json输出、OpenOCD 与 J-Link 配置生成,以及面向STM32F103与AT32F415的 GCC 适配处理。
因此,uvprojx2cmake 更接近当前仓库的参考来源之一;当前仓库则面向本地使用场景加入了更多与 VS Code、调试器和芯片系列有关的扩展代码。
依赖环境
根据所选编译器与调试方式,需要具备以下工具中的部分或全部:
| 工具 | 用途 |
|---|---|
| Python 3 | 运行图形界面与命令行程序 |
| PySide6 | 图形界面 |
| CMake | 工程生成与编译 |
| Ninja 或其他 Generator 对应工具 | 构建后端 |
| Keil MDK | ArmClang 模式、RTE 组件信息、Keil 调试任务 |
| GNU Arm Embedded GCC | GCC 模式编译 |
| OpenOCD | ST-Link、DAPLink、Nu-Link、部分 J-Link 场景 |
| SEGGER J-Link Software | J-Link 烧录与调试 |
| VS Code 与 Cortex-Debug 扩展 | 调试配置使用 |
补充说明
当前仓库的主要目标,是把常见 Keil Cortex-M 工程转换为更便于在 VS Code 中维护和编译的 CMake 工程。对于新系列芯片,通常需要从以下函数开始补写规则:
_inferred_device_defines()_prepared_gcc_source_files()_guess_gcc_linker_script()_default_openocd_target_script()_build_vscode_tasks()_build_vscode_launch()
相关细节已整理在 keil_to_cmake_guide.html 中。
更多推荐
所有评论(0)