k2c 1.5.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,68 @@
1
+ name: Build Windows Executable
2
+ on:
3
+ push:
4
+ tags:
5
+ - "v*.*.*"
6
+ permissions:
7
+ contents: read
8
+ jobs:
9
+ build-exe:
10
+ if: startsWith(github.ref, 'refs/tags/')
11
+ runs-on: windows-latest
12
+ permissions:
13
+ contents: write
14
+ steps:
15
+ - name: Checkout code
16
+ uses: actions/checkout@v4
17
+ with:
18
+ fetch-depth: 0
19
+ - name: Install Python
20
+ uses: actions/setup-python@v5
21
+ with:
22
+ python-version: '3.13'
23
+ architecture: 'x64'
24
+ - name: Install requirements and installer
25
+ run: |
26
+ python -m pip install --upgrade pip
27
+ python -m pip install json5 pyinstaller
28
+ - name: Run pyinstaller
29
+ env:
30
+ K2C_VERSION: ${{ github.ref_name }}
31
+ run: |
32
+ python -m PyInstaller k2c.spec
33
+ - run: ls dist
34
+ - run: mv dist/k2c.exe .
35
+ - run: ls .
36
+ - name: Build Changelog
37
+ id: github_release
38
+ uses: mikepenz/release-changelog-builder-action@v5
39
+ env:
40
+ GITHUB_TOKEN: ${{ secrets.RELEASE_TOKEN }}
41
+ - name: Release
42
+ uses: softprops/action-gh-release@v2
43
+ with:
44
+ token: ${{ secrets.RELEASE_TOKEN }}
45
+ body: ${{steps.github_release.outputs.changelog}}
46
+ files: |
47
+ ./k2c.exe
48
+ publish-pypi:
49
+ if: startsWith(github.ref, 'refs/tags/')
50
+ runs-on: ubuntu-latest
51
+ steps:
52
+ - name: Checkout code
53
+ uses: actions/checkout@v4
54
+ with:
55
+ fetch-depth: 0
56
+ - name: Install Python
57
+ uses: actions/setup-python@v5
58
+ with:
59
+ python-version: '3.13'
60
+ - name: Build Python package
61
+ run: |
62
+ python -m pip install build
63
+ python -m build
64
+ - name: Publish Python package to PyPI
65
+ uses: pypa/gh-action-pypi-publish@release/v1
66
+ with:
67
+ password: ${{ secrets.PYPI_TOKEN }}
68
+ attestations: false
k2c-1.5.1/.gitignore ADDED
@@ -0,0 +1,15 @@
1
+ # Python-generated files
2
+ __pycache__/
3
+ *.py[oc]
4
+ build/
5
+ dist/
6
+ wheels/
7
+ *.egg-info
8
+
9
+ # Virtual environments
10
+ .venv
11
+ data/
12
+ compile_commands.json
13
+ output/
14
+ *.uvprojx
15
+ uv.lock
@@ -0,0 +1 @@
1
+ 3.13
k2c-1.5.1/PKG-INFO ADDED
@@ -0,0 +1,168 @@
1
+ Metadata-Version: 2.4
2
+ Name: k2c
3
+ Version: 1.5.1
4
+ Summary: Keil .uvprojx to compile_commands.json Converter
5
+ Requires-Python: >=3.13
6
+ Description-Content-Type: text/markdown
7
+ Requires-Dist: json5>=0.12.0
8
+
9
+ # Keil to Compile Commands Converter
10
+
11
+ 这是一个 Python/uv 工具,用于解析 Keil MDK 项目文件 (.uvprojx、.uvproj) 并生成 `compile_commands.json` 文件。这个文件可以被 Clangd 等语言服务器使用,以提供更准确的代码补全、导航和诊断功能。
12
+
13
+ ## 功能
14
+
15
+ * 解析 Keil `.uvprojx` XML 文件。
16
+ * 提取项目中包含的 C/C++ 源文件 (`.c`) 和汇编文件 (`.s`)。
17
+ * 提取在 Keil 项目设置中定义的宏 (`-D` 标志)。
18
+ * 提取在 Keil 项目设置中指定的包含路径 (`-I` 标志)。
19
+ * 支持 Target 选择和 Target 列表查看。
20
+ * 合并 Target、Group、File 级别的宏、包含路径和部分编译选项。
21
+ * 支持 C、C++、汇编源文件 (`.c`, `.cc`, `.cpp`, `.cxx`, `.s`, `.S`)。
22
+ * 从 Keil CPU/FPU 配置推导常用 clang 参数,如 `-mcpu`、`-mthumb`、`-mfpu`。
23
+ * 自动处理包含路径的相对路径转换
24
+ * 统一路径分隔符为 `/` 格式
25
+ * 支持从 VSCode Clangd 设置中自动获取编译器路径
26
+ * 支持检查缺失的源文件和包含目录。
27
+ * 根据提取的信息生成 `compile_commands.json` 文件。
28
+
29
+ ## 依赖
30
+
31
+ * uv
32
+ * Python 3.13+
33
+ * 标准库: `xml.etree.ElementTree`, `json`, `os`, `sys` (无需额外安装)
34
+ * `json5` (由 uv 按 `pyproject.toml` 自动安装,用于读取带注释的VSCode设置文件)
35
+
36
+ ## 使用方法
37
+
38
+ ### 安装
39
+
40
+ 通过 pip 安装 Python 包:
41
+
42
+ ```bash
43
+ pip install k2c
44
+ ```
45
+
46
+ 安装后可以直接运行:
47
+
48
+ ```bash
49
+ k2c --version
50
+ ```
51
+
52
+ 也可以从 GitHub Release 下载 `k2c.exe` 后直接运行。
53
+
54
+ ### 本地开发运行
55
+
56
+ 首次使用先同步运行环境:
57
+
58
+ ```bash
59
+ uv sync
60
+ ```
61
+
62
+ 日常使用建议加 `--no-sync`,避免每次运行前重复检查和同步环境:
63
+
64
+ ```bash
65
+ uv run --no-sync k2c <path_to_your_keil_project.uvprojx> [options]
66
+ ```
67
+
68
+ **参数说明:**
69
+ - `--version`: 输出当前版本号
70
+ - `-d`: 可选参数,创建clangd缓存目录
71
+ - 不带参数值: 默认创建`.cache`目录
72
+ - 带参数值: 创建指定名称的目录
73
+ - `-o, --output`: 指定输出文件路径,默认 `compile_commands.json`
74
+ - `--target`: 指定要解析的 Keil Target 名称
75
+ - `--list-targets`: 列出工程中的 Target 名称后退出
76
+ - `--compiler`: 显式指定编译器路径,优先级高于 VSCode 设置
77
+ - `--dry-run`: 只解析并打印摘要,不写入文件
78
+ - `--verbose`: 打印解析摘要
79
+ - `--check-missing-files`: 检查缺失的源文件和 include 路径
80
+
81
+ **示例:**
82
+
83
+ 基本用法:
84
+ ```bash
85
+ uv run --no-sync k2c C:/Path/To/Your/Project/YourProject.uvprojx
86
+ ```
87
+
88
+ 查看 Target:
89
+ ```bash
90
+ uv run --no-sync k2c ../../MyKeilProject/MyProject.uvprojx --list-targets
91
+ ```
92
+
93
+ 查看版本:
94
+ ```bash
95
+ uv run --no-sync k2c --version
96
+ ```
97
+
98
+ 指定 Target 和编译器:
99
+ ```bash
100
+ uv run --no-sync k2c ../../MyKeilProject/MyProject.uvprojx --target Debug --compiler C:/Keil_v5/ARM/ARMCLANG/bin/armclang.exe
101
+ ```
102
+
103
+ 指定输出路径:
104
+ ```bash
105
+ uv run --no-sync k2c ../../MyKeilProject/MyProject.uvprojx -o build/compile_commands.json
106
+ ```
107
+
108
+ 检查解析结果:
109
+ ```bash
110
+ uv run --no-sync k2c ../../MyKeilProject/MyProject.uvprojx --dry-run --verbose --check-missing-files
111
+ ```
112
+
113
+ 创建默认缓存目录:
114
+ ```bash
115
+ uv run --no-sync k2c ../../MyKeilProject/MyProject.uvprojx -d
116
+ ```
117
+
118
+ 创建自定义缓存目录:
119
+ ```bash
120
+ uv run --no-sync k2c ../../MyKeilProject/MyProject.uvprojx -d my_cache
121
+ ```
122
+
123
+ 当然你也可以使用打包好的exe可执行文件 [Release](https://github.com/liuyu80/keil2CompileCommands/releases/latest)
124
+
125
+ ```bash
126
+ k2c ../../MyKeilProject/MyProject.uvprojx -d
127
+ ```
128
+
129
+ 工具默认将在当前工作目录下生成一个名为 `compile_commands.json` 的文件。
130
+
131
+ ## 编译器路径设置
132
+
133
+ 为了获取正确的编译器路径,脚本会按以下顺序查找:
134
+ 1. 当前项目目录下的 `.vscode/settings.json`
135
+ 2. 全局 VSCode 用户设置 (`AppData/Code/User/settings.json`)
136
+
137
+ 如果找不到编译器路径,脚本会提醒您添加以下配置到 VSCode 设置中:
138
+ ```json
139
+ "clangd.arguments": ["--query-driver=<absolute_path_to_compiler>"]
140
+ ```
141
+
142
+ ## `compile_commands.json`
143
+
144
+ 生成的 `compile_commands.json` 文件包含一个 JSON 数组,其中每个对象代表项目中的一个源文件及其编译参数。结构如下:
145
+
146
+ ```json
147
+ [
148
+ {
149
+ "directory": "/path/to/source/file/directory",
150
+ "arguments": [
151
+ "<absolute_path_to_compiler>",
152
+ "-Iinclude/path1",
153
+ "-Iinclude/path2",
154
+ "-DMACRO1",
155
+ "-DMACRO2"
156
+ ],
157
+ "file": "/path/to/source/file/filename.c"
158
+ },
159
+ ...
160
+ ]
161
+ ```
162
+
163
+ 这个文件可以被许多开发工具(如 VS Code 配合 Clangd 插件)使用,以增强代码编辑体验。
164
+
165
+ Clangd LSP 安装包: https://github.com/clangd/clangd/releases/latest
166
+
167
+ VS Code 的 Clangd 插件: https://github.com/clangd/vscode-clangd/releases/latest
168
+
k2c-1.5.1/README.md ADDED
@@ -0,0 +1,160 @@
1
+ # Keil to Compile Commands Converter
2
+
3
+ 这是一个 Python/uv 工具,用于解析 Keil MDK 项目文件 (.uvprojx、.uvproj) 并生成 `compile_commands.json` 文件。这个文件可以被 Clangd 等语言服务器使用,以提供更准确的代码补全、导航和诊断功能。
4
+
5
+ ## 功能
6
+
7
+ * 解析 Keil `.uvprojx` XML 文件。
8
+ * 提取项目中包含的 C/C++ 源文件 (`.c`) 和汇编文件 (`.s`)。
9
+ * 提取在 Keil 项目设置中定义的宏 (`-D` 标志)。
10
+ * 提取在 Keil 项目设置中指定的包含路径 (`-I` 标志)。
11
+ * 支持 Target 选择和 Target 列表查看。
12
+ * 合并 Target、Group、File 级别的宏、包含路径和部分编译选项。
13
+ * 支持 C、C++、汇编源文件 (`.c`, `.cc`, `.cpp`, `.cxx`, `.s`, `.S`)。
14
+ * 从 Keil CPU/FPU 配置推导常用 clang 参数,如 `-mcpu`、`-mthumb`、`-mfpu`。
15
+ * 自动处理包含路径的相对路径转换
16
+ * 统一路径分隔符为 `/` 格式
17
+ * 支持从 VSCode Clangd 设置中自动获取编译器路径
18
+ * 支持检查缺失的源文件和包含目录。
19
+ * 根据提取的信息生成 `compile_commands.json` 文件。
20
+
21
+ ## 依赖
22
+
23
+ * uv
24
+ * Python 3.13+
25
+ * 标准库: `xml.etree.ElementTree`, `json`, `os`, `sys` (无需额外安装)
26
+ * `json5` (由 uv 按 `pyproject.toml` 自动安装,用于读取带注释的VSCode设置文件)
27
+
28
+ ## 使用方法
29
+
30
+ ### 安装
31
+
32
+ 通过 pip 安装 Python 包:
33
+
34
+ ```bash
35
+ pip install k2c
36
+ ```
37
+
38
+ 安装后可以直接运行:
39
+
40
+ ```bash
41
+ k2c --version
42
+ ```
43
+
44
+ 也可以从 GitHub Release 下载 `k2c.exe` 后直接运行。
45
+
46
+ ### 本地开发运行
47
+
48
+ 首次使用先同步运行环境:
49
+
50
+ ```bash
51
+ uv sync
52
+ ```
53
+
54
+ 日常使用建议加 `--no-sync`,避免每次运行前重复检查和同步环境:
55
+
56
+ ```bash
57
+ uv run --no-sync k2c <path_to_your_keil_project.uvprojx> [options]
58
+ ```
59
+
60
+ **参数说明:**
61
+ - `--version`: 输出当前版本号
62
+ - `-d`: 可选参数,创建clangd缓存目录
63
+ - 不带参数值: 默认创建`.cache`目录
64
+ - 带参数值: 创建指定名称的目录
65
+ - `-o, --output`: 指定输出文件路径,默认 `compile_commands.json`
66
+ - `--target`: 指定要解析的 Keil Target 名称
67
+ - `--list-targets`: 列出工程中的 Target 名称后退出
68
+ - `--compiler`: 显式指定编译器路径,优先级高于 VSCode 设置
69
+ - `--dry-run`: 只解析并打印摘要,不写入文件
70
+ - `--verbose`: 打印解析摘要
71
+ - `--check-missing-files`: 检查缺失的源文件和 include 路径
72
+
73
+ **示例:**
74
+
75
+ 基本用法:
76
+ ```bash
77
+ uv run --no-sync k2c C:/Path/To/Your/Project/YourProject.uvprojx
78
+ ```
79
+
80
+ 查看 Target:
81
+ ```bash
82
+ uv run --no-sync k2c ../../MyKeilProject/MyProject.uvprojx --list-targets
83
+ ```
84
+
85
+ 查看版本:
86
+ ```bash
87
+ uv run --no-sync k2c --version
88
+ ```
89
+
90
+ 指定 Target 和编译器:
91
+ ```bash
92
+ uv run --no-sync k2c ../../MyKeilProject/MyProject.uvprojx --target Debug --compiler C:/Keil_v5/ARM/ARMCLANG/bin/armclang.exe
93
+ ```
94
+
95
+ 指定输出路径:
96
+ ```bash
97
+ uv run --no-sync k2c ../../MyKeilProject/MyProject.uvprojx -o build/compile_commands.json
98
+ ```
99
+
100
+ 检查解析结果:
101
+ ```bash
102
+ uv run --no-sync k2c ../../MyKeilProject/MyProject.uvprojx --dry-run --verbose --check-missing-files
103
+ ```
104
+
105
+ 创建默认缓存目录:
106
+ ```bash
107
+ uv run --no-sync k2c ../../MyKeilProject/MyProject.uvprojx -d
108
+ ```
109
+
110
+ 创建自定义缓存目录:
111
+ ```bash
112
+ uv run --no-sync k2c ../../MyKeilProject/MyProject.uvprojx -d my_cache
113
+ ```
114
+
115
+ 当然你也可以使用打包好的exe可执行文件 [Release](https://github.com/liuyu80/keil2CompileCommands/releases/latest)
116
+
117
+ ```bash
118
+ k2c ../../MyKeilProject/MyProject.uvprojx -d
119
+ ```
120
+
121
+ 工具默认将在当前工作目录下生成一个名为 `compile_commands.json` 的文件。
122
+
123
+ ## 编译器路径设置
124
+
125
+ 为了获取正确的编译器路径,脚本会按以下顺序查找:
126
+ 1. 当前项目目录下的 `.vscode/settings.json`
127
+ 2. 全局 VSCode 用户设置 (`AppData/Code/User/settings.json`)
128
+
129
+ 如果找不到编译器路径,脚本会提醒您添加以下配置到 VSCode 设置中:
130
+ ```json
131
+ "clangd.arguments": ["--query-driver=<absolute_path_to_compiler>"]
132
+ ```
133
+
134
+ ## `compile_commands.json`
135
+
136
+ 生成的 `compile_commands.json` 文件包含一个 JSON 数组,其中每个对象代表项目中的一个源文件及其编译参数。结构如下:
137
+
138
+ ```json
139
+ [
140
+ {
141
+ "directory": "/path/to/source/file/directory",
142
+ "arguments": [
143
+ "<absolute_path_to_compiler>",
144
+ "-Iinclude/path1",
145
+ "-Iinclude/path2",
146
+ "-DMACRO1",
147
+ "-DMACRO2"
148
+ ],
149
+ "file": "/path/to/source/file/filename.c"
150
+ },
151
+ ...
152
+ ]
153
+ ```
154
+
155
+ 这个文件可以被许多开发工具(如 VS Code 配合 Clangd 插件)使用,以增强代码编辑体验。
156
+
157
+ Clangd LSP 安装包: https://github.com/clangd/clangd/releases/latest
158
+
159
+ VS Code 的 Clangd 插件: https://github.com/clangd/vscode-clangd/releases/latest
160
+
k2c-1.5.1/k2c.spec ADDED
@@ -0,0 +1,51 @@
1
+ # -*- mode: python ; coding: utf-8 -*-
2
+
3
+ import os
4
+ from pathlib import Path
5
+
6
+
7
+ version = os.getenv('K2C_VERSION', '0.1.0')
8
+ version_hook = Path('build') / 'k2c_version_hook.py'
9
+ version_hook.parent.mkdir(parents=True, exist_ok=True)
10
+ version_hook.write_text(
11
+ "import os\n\n"
12
+ f"os.environ.setdefault('K2C_VERSION', {version!r})\n",
13
+ encoding='utf-8',
14
+ )
15
+
16
+
17
+ a = Analysis(
18
+ ['main.py'],
19
+ pathex=['src'],
20
+ binaries=[],
21
+ datas=[],
22
+ hiddenimports=[],
23
+ hookspath=[],
24
+ hooksconfig={},
25
+ runtime_hooks=[str(version_hook)],
26
+ excludes=[],
27
+ noarchive=False,
28
+ optimize=0,
29
+ )
30
+ pyz = PYZ(a.pure)
31
+
32
+ exe = EXE(
33
+ pyz,
34
+ a.scripts,
35
+ a.binaries,
36
+ a.datas,
37
+ [],
38
+ name='k2c',
39
+ debug=False,
40
+ bootloader_ignore_signals=False,
41
+ strip=False,
42
+ upx=True,
43
+ upx_exclude=[],
44
+ runtime_tmpdir=None,
45
+ console=True,
46
+ disable_windowed_traceback=False,
47
+ argv_emulation=False,
48
+ target_arch=None,
49
+ codesign_identity=None,
50
+ entitlements_file=None,
51
+ )
k2c-1.5.1/main.py ADDED
@@ -0,0 +1,24 @@
1
+ from pathlib import Path
2
+ import sys
3
+
4
+
5
+ sys.path.insert(0, str(Path(__file__).resolve().parent / "src"))
6
+
7
+ from keil2compilecommands.cli import main
8
+ from keil2compilecommands.k2c_utils import (
9
+ build_compile_commands,
10
+ create_clangd_directory,
11
+ get_clangd_query_driver,
12
+ write_compile_commands,
13
+ )
14
+
15
+
16
+ def parse_keil_project(keil_project_file_path: str):
17
+ return build_compile_commands(
18
+ keil_project_file_path,
19
+ compiler=get_clangd_query_driver(),
20
+ )
21
+
22
+
23
+ if __name__ == "__main__":
24
+ raise SystemExit(main())
@@ -0,0 +1,33 @@
1
+ [build-system]
2
+ requires = ["setuptools>=69", "setuptools-scm>=8"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "k2c"
7
+ description = "Keil .uvprojx to compile_commands.json Converter"
8
+ readme = "README.md"
9
+ requires-python = ">=3.13"
10
+ dynamic = ["version"]
11
+ dependencies = [
12
+ "json5>=0.12.0",
13
+ ]
14
+
15
+ [project.scripts]
16
+ k2c = "keil2compilecommands.cli:main"
17
+
18
+ [tool.setuptools.packages.find]
19
+ where = ["src"]
20
+
21
+ [tool.setuptools_scm]
22
+ fallback_version = "0.1.0"
23
+
24
+ [dependency-groups]
25
+ dev = [
26
+ "auto-py-to-exe>=2.46.0",
27
+ "build>=1.2.2",
28
+ "twine>=6.1.0",
29
+ ]
30
+
31
+ [[tool.uv.index]]
32
+ url = "https://pypi.tuna.tsinghua.edu.cn/simple"
33
+ default = true
@@ -0,0 +1 @@
1
+ json5==0.12.0
k2c-1.5.1/setup.cfg ADDED
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,168 @@
1
+ Metadata-Version: 2.4
2
+ Name: k2c
3
+ Version: 1.5.1
4
+ Summary: Keil .uvprojx to compile_commands.json Converter
5
+ Requires-Python: >=3.13
6
+ Description-Content-Type: text/markdown
7
+ Requires-Dist: json5>=0.12.0
8
+
9
+ # Keil to Compile Commands Converter
10
+
11
+ 这是一个 Python/uv 工具,用于解析 Keil MDK 项目文件 (.uvprojx、.uvproj) 并生成 `compile_commands.json` 文件。这个文件可以被 Clangd 等语言服务器使用,以提供更准确的代码补全、导航和诊断功能。
12
+
13
+ ## 功能
14
+
15
+ * 解析 Keil `.uvprojx` XML 文件。
16
+ * 提取项目中包含的 C/C++ 源文件 (`.c`) 和汇编文件 (`.s`)。
17
+ * 提取在 Keil 项目设置中定义的宏 (`-D` 标志)。
18
+ * 提取在 Keil 项目设置中指定的包含路径 (`-I` 标志)。
19
+ * 支持 Target 选择和 Target 列表查看。
20
+ * 合并 Target、Group、File 级别的宏、包含路径和部分编译选项。
21
+ * 支持 C、C++、汇编源文件 (`.c`, `.cc`, `.cpp`, `.cxx`, `.s`, `.S`)。
22
+ * 从 Keil CPU/FPU 配置推导常用 clang 参数,如 `-mcpu`、`-mthumb`、`-mfpu`。
23
+ * 自动处理包含路径的相对路径转换
24
+ * 统一路径分隔符为 `/` 格式
25
+ * 支持从 VSCode Clangd 设置中自动获取编译器路径
26
+ * 支持检查缺失的源文件和包含目录。
27
+ * 根据提取的信息生成 `compile_commands.json` 文件。
28
+
29
+ ## 依赖
30
+
31
+ * uv
32
+ * Python 3.13+
33
+ * 标准库: `xml.etree.ElementTree`, `json`, `os`, `sys` (无需额外安装)
34
+ * `json5` (由 uv 按 `pyproject.toml` 自动安装,用于读取带注释的VSCode设置文件)
35
+
36
+ ## 使用方法
37
+
38
+ ### 安装
39
+
40
+ 通过 pip 安装 Python 包:
41
+
42
+ ```bash
43
+ pip install k2c
44
+ ```
45
+
46
+ 安装后可以直接运行:
47
+
48
+ ```bash
49
+ k2c --version
50
+ ```
51
+
52
+ 也可以从 GitHub Release 下载 `k2c.exe` 后直接运行。
53
+
54
+ ### 本地开发运行
55
+
56
+ 首次使用先同步运行环境:
57
+
58
+ ```bash
59
+ uv sync
60
+ ```
61
+
62
+ 日常使用建议加 `--no-sync`,避免每次运行前重复检查和同步环境:
63
+
64
+ ```bash
65
+ uv run --no-sync k2c <path_to_your_keil_project.uvprojx> [options]
66
+ ```
67
+
68
+ **参数说明:**
69
+ - `--version`: 输出当前版本号
70
+ - `-d`: 可选参数,创建clangd缓存目录
71
+ - 不带参数值: 默认创建`.cache`目录
72
+ - 带参数值: 创建指定名称的目录
73
+ - `-o, --output`: 指定输出文件路径,默认 `compile_commands.json`
74
+ - `--target`: 指定要解析的 Keil Target 名称
75
+ - `--list-targets`: 列出工程中的 Target 名称后退出
76
+ - `--compiler`: 显式指定编译器路径,优先级高于 VSCode 设置
77
+ - `--dry-run`: 只解析并打印摘要,不写入文件
78
+ - `--verbose`: 打印解析摘要
79
+ - `--check-missing-files`: 检查缺失的源文件和 include 路径
80
+
81
+ **示例:**
82
+
83
+ 基本用法:
84
+ ```bash
85
+ uv run --no-sync k2c C:/Path/To/Your/Project/YourProject.uvprojx
86
+ ```
87
+
88
+ 查看 Target:
89
+ ```bash
90
+ uv run --no-sync k2c ../../MyKeilProject/MyProject.uvprojx --list-targets
91
+ ```
92
+
93
+ 查看版本:
94
+ ```bash
95
+ uv run --no-sync k2c --version
96
+ ```
97
+
98
+ 指定 Target 和编译器:
99
+ ```bash
100
+ uv run --no-sync k2c ../../MyKeilProject/MyProject.uvprojx --target Debug --compiler C:/Keil_v5/ARM/ARMCLANG/bin/armclang.exe
101
+ ```
102
+
103
+ 指定输出路径:
104
+ ```bash
105
+ uv run --no-sync k2c ../../MyKeilProject/MyProject.uvprojx -o build/compile_commands.json
106
+ ```
107
+
108
+ 检查解析结果:
109
+ ```bash
110
+ uv run --no-sync k2c ../../MyKeilProject/MyProject.uvprojx --dry-run --verbose --check-missing-files
111
+ ```
112
+
113
+ 创建默认缓存目录:
114
+ ```bash
115
+ uv run --no-sync k2c ../../MyKeilProject/MyProject.uvprojx -d
116
+ ```
117
+
118
+ 创建自定义缓存目录:
119
+ ```bash
120
+ uv run --no-sync k2c ../../MyKeilProject/MyProject.uvprojx -d my_cache
121
+ ```
122
+
123
+ 当然你也可以使用打包好的exe可执行文件 [Release](https://github.com/liuyu80/keil2CompileCommands/releases/latest)
124
+
125
+ ```bash
126
+ k2c ../../MyKeilProject/MyProject.uvprojx -d
127
+ ```
128
+
129
+ 工具默认将在当前工作目录下生成一个名为 `compile_commands.json` 的文件。
130
+
131
+ ## 编译器路径设置
132
+
133
+ 为了获取正确的编译器路径,脚本会按以下顺序查找:
134
+ 1. 当前项目目录下的 `.vscode/settings.json`
135
+ 2. 全局 VSCode 用户设置 (`AppData/Code/User/settings.json`)
136
+
137
+ 如果找不到编译器路径,脚本会提醒您添加以下配置到 VSCode 设置中:
138
+ ```json
139
+ "clangd.arguments": ["--query-driver=<absolute_path_to_compiler>"]
140
+ ```
141
+
142
+ ## `compile_commands.json`
143
+
144
+ 生成的 `compile_commands.json` 文件包含一个 JSON 数组,其中每个对象代表项目中的一个源文件及其编译参数。结构如下:
145
+
146
+ ```json
147
+ [
148
+ {
149
+ "directory": "/path/to/source/file/directory",
150
+ "arguments": [
151
+ "<absolute_path_to_compiler>",
152
+ "-Iinclude/path1",
153
+ "-Iinclude/path2",
154
+ "-DMACRO1",
155
+ "-DMACRO2"
156
+ ],
157
+ "file": "/path/to/source/file/filename.c"
158
+ },
159
+ ...
160
+ ]
161
+ ```
162
+
163
+ 这个文件可以被许多开发工具(如 VS Code 配合 Clangd 插件)使用,以增强代码编辑体验。
164
+
165
+ Clangd LSP 安装包: https://github.com/clangd/clangd/releases/latest
166
+
167
+ VS Code 的 Clangd 插件: https://github.com/clangd/vscode-clangd/releases/latest
168
+