这是一个 Python 脚本,用于解析 Keil MDK 项目文件 (.uvprojx、.uvproj) 并生成 compile_commands.json 文件。这个文件可以被 Clangd 等语言服务器使用,以提供更准确的代码补全、导航和诊断功能。
- 解析 Keil
.uvprojxXML 文件。 - 提取项目中包含的 C/C++ 源文件 (
.c) 和汇编文件 (.s)。 - 提取在 Keil 项目设置中定义的宏 (
-D标志)。 - 提取在 Keil 项目设置中指定的包含路径 (
-I标志)。 - 自动处理包含路径的相对路径转换
- 统一路径分隔符为
/格式 - 支持从 VSCode Clangd 设置中自动获取编译器路径
- 根据提取的信息生成
compile_commands.json文件。
- Python 3.x
- 标准库:
xml.etree.ElementTree,json,os,sys(无需额外安装) - 可选:
json5(用于读取带注释的VSCode设置文件)
在命令行中运行脚本,并将 Keil 项目文件 (.uvprojx) 的路径作为参数传递:
python main.py <path_to_your_keil_project.uvprojx> [-d [CACHE_DIR]]参数说明:
-d: 可选参数,创建clangd缓存目录- 不带参数值: 默认创建
.cache目录 - 带参数值: 创建指定名称的目录
- 不带参数值: 默认创建
示例:
基本用法:
python main.py C:/Path/To/Your/Project/YourProject.uvprojx创建默认缓存目录:
python main.py ../../MyKeilProject/MyProject.uvprojx -d创建自定义缓存目录:
python main.py ../../MyKeilProject/MyProject.uvprojx -d my_cache当然你也可以使用打包好的exe可执行文件 Release
k2c ../../MyKeilProject/MyProject.uvprojx -d脚本将在运行 main.py 的目录下生成一个名为 compile_commands.json 的文件。
为了获取正确的编译器路径,脚本会按以下顺序查找:
- 当前项目目录下的
.vscode/settings.json - 全局 VSCode 用户设置 (
AppData/Code/User/settings.json)
如果找不到编译器路径,脚本会提醒您添加以下配置到 VSCode 设置中:
"clangd.arguments": ["--query-driver=<absolute_path_to_compiler>"]生成的 compile_commands.json 文件包含一个 JSON 数组,其中每个对象代表项目中的一个源文件及其编译参数。结构如下:
[
{
"directory": "/path/to/source/file/directory",
"arguments": [
"<absolute_path_to_compiler>",
"-Iinclude/path1",
"-Iinclude/path2",
"-DMACRO1",
"-DMACRO2"
],
"file": "/path/to/source/file/filename.c"
},
...
]这个文件可以被许多开发工具(如 VS Code 配合 Clangd 插件)使用,以增强代码编辑体验。
Clangd LSP 安装包: https://github.com/clangd/clangd/releases/latest
VS Code 的 Clangd 插件: https://github.com/clangd/vscode-clangd/releases/latest