# clangd_compile_script **Repository Path**: yllfly/clangd_compile_script ## Basic Information - **Project Name**: clangd_compile_script - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-07-07 - **Last Updated**: 2026-07-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # clangd compile_commands 生成器 为 C/C++ 工程自动生成 clangd 所需的 `compile_commands.json` 与 `.clangd` 配置文件。支持图形界面、命令行和 XML 工程配置,适用于嵌入式 SDK、Keil、TI MSPM0 等无 CMake 编译数据库的场景。 ## 功能特性 - 扫描多个代码目录,生成 `build/compile_commands.json` - 根据模板生成项目根目录下的 `.clangd` - 可配置头文件路径(`-I`)、系统头文件路径(`-isystem`)、预处理器宏(`-D`) - 支持排除目录,避免扫描 SDK / 第三方代码 - 工程配置可保存/加载为 `clangd_config.xml` - 支持 GUI 与 CLI 两种使用方式 - 可打包为独立 exe,无需安装 Python ## 生成结果 在**项目根目录**下生成: ``` 项目根目录/ ├── .clangd # clangd 配置(由 clangd.template 生成) └── build/ └── compile_commands.json # 编译数据库 ``` ## 快速开始 ### 方式一:Python 运行 ```bat install.bat start_gui.bat ``` 或: ```bash pip install -r requirements.txt python main.py ``` ### 方式二:打包 exe ```bat build_exe.bat ``` 打包完成后得到 `clangd_compile_commands.exe`,可复制到任意工程根目录使用。 ## 图形界面 1. **代码路径**:添加一个或多个源码目录 2. **排除目录**:跳过不需要扫描的目录(如 `third_party/`、`build/`) 3. **项目根目录**:输出 `.clangd` 和 `build/` 的位置 4. **头文件目录 (-I)**:追加到 `.clangd` 的 `CompileFlags.Add` 5. **系统头文件目录 (-isystem)**:追加 SDK 等系统头文件路径 6. **预处理器定义**:如 `DEBUG`、`MAX_BUFFER_SIZE=4096`、`-D__ARMCC_VERSION=6100000` 7. 点击 **生成**,或 **保存/加载** 工程配置 ## 命令行 在**工程根目录**(`clangd_config.xml` 所在目录)执行: ```bat clangd_compile_commands.exe clangd_config.xml ``` 其他用法: ```bat # 启动 GUI clangd_compile_commands.exe clangd_compile_commands.exe --gui # Python 开发模式 python main.py clangd_config.xml python main.py --gui python main.py --help ``` CLI 失败时会在当前目录写入 `clangd_generate.log`。 ## 工程配置文件 参考 `clangd_config.example.xml`: ```xml . false ./src ./third_party ./build D:/sdk/include D:/ti/mspm0_sdk/driverlib DEBUG MAX_BUFFER_SIZE=4096 ``` | 节点 | 说明 | |------|------| | `ProjectRoot` | 项目根目录,`.` 表示 xml 文件所在目录 | | `SourceDirs` | 代码扫描路径(至少一个) | | `ExcludeDirs` | 排除目录及其子目录 | | `IncludeDirs` | `-I` 头文件路径 | | `SystemIncludeDirs` | `-isystem` 系统头文件路径 | | `Defines` | 预处理器宏定义 | | `ForceEmbedded` | 是否按嵌入式 ARM 默认参数扫描 | 路径可使用相对路径(相对于 xml 文件)或绝对路径。 ## 自定义 .clangd 模板 编辑 `clangd.template` 可修改默认 clangd 行为。模板中保留以下占位符,生成时会被替换: | 占位符 | 注入内容 | |--------|----------| | `{{USER_DEFINES}}` | GUI/XML 配置的宏定义 | | `{{USER_INCLUDE_DIRS}}` | `-I` 头文件路径 | | `{{USER_SYSTEM_INCLUDE_DIRS}}` | `-isystem` 路径 | 即使删除占位符,程序也会尝试在 `CompileFlags.Remove` 之前自动插入用户配置。 修改模板后需重新打包 exe(`build_exe.bat`)。 ## 项目结构 ``` clangd_python_build/ ├── main.py # 入口(GUI / CLI) ├── gui_app.py # PyQt5 图形界面 ├── generate_compile_commands.py # 生成核心逻辑 ├── project_config.py # XML 配置读写 ├── clangd.template # .clangd 模板 ├── clangd_config.example.xml # 配置示例 ├── clangd_compile_commands.spec # PyInstaller 配置 ├── build_exe.bat # 打包脚本 ├── install.bat # 安装依赖 ├── start_gui.bat # 启动 GUI ├── requirements.txt # 运行依赖 └── requirements-build.txt # 打包依赖 ``` ## 常见问题 ### 加载 xml 报错 `No module named expat` 旧版 exe 未打包 `pyexpat` 模块。请重新执行 `build_exe.bat` 生成新版 exe。 ### 命令行无输出、未生成文件 - 确认在**工程根目录**执行命令 - 确认 `clangd_config.xml` 路径正确 - 查看当前目录下的 `clangd_generate.log` - 使用新版 exe(已启用控制台输出) ### clangd 仍找不到头文件 1. 在 GUI 或 xml 中补充 `IncludeDirs` / `SystemIncludeDirs` 2. 在 `Defines` 中添加芯片/SDK 相关宏(如 `__ARMCC_VERSION=6100000`) 3. 确认 `.clangd` 中 `CompilationDatabase: build/` 与生成路径一致 ## 依赖 - Python 3.8+ - PyQt5(GUI) - PyInstaller(仅打包时需要) ## 许可证 内部工具,按需使用与修改。