其他
CMake + arm-none-eabi-gcc…
当需要扫描、配置、编译、重建、清理基于 CMake 和 arm-none-eabi-gcc 的嵌入式工程,或分析 ELF 固件大小时使用。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 35/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 38/100 ×0.15
适用场景
CMake + arm-none-eab特定
解决思路
- 读取 skill/config.json,确认 cmake_exe 路径有效。
- 环境级配置 skill/config.json 包含 cmake_exe、toolchain_prefix、toolchain_path、operation_mode;operation_mode 取值:1 直接执行 / 2 输出风险摘要但不阻塞 / 3 执行前确认。
- 工程级配置统一保存在 workspace/.embeddedskills/config.json,包含 gcc.project、gcc.preset、gcc.log_dir;构建成功后自动更新 project 和 preset。
- 参数解析优先级从高到低:1 CLI 显式参数、2 环境级配置(skill/config.json)、3 工程级配置(.embeddedskills/config.json)、4 state.json(上次构建记录)、5 搜索/询问。
- 冲突解决规则:同一参数存在多个来源时,以序号最小的来源为准;高序号来源仅在低序号来源未提供该参数时生效。例如 CLI 已指定 --preset Debug,则忽略 state.json 中记录的上次 preset。
- 子命令 scan:搜索当前目录下的 CMake 嵌入式工程,风险低。
- 子命令 presets:列出 CMakePresets.json 中的 configure/build preset,风险低。
- 子命令 configure:执行 cmake --preset 生成构建系统,风险中。
- 子命令 build:增量编译 cmake --build,风险中。
- 子命令 rebuild:清理后全量重建,风险中。
- 子命令 clean:清理构建目录,风险高。
- 子命令 size:分析 ELF 文件大小(text/data/bss 和内存使用),风险低。
- 执行流程:1 读取 config.json,确认 cmake_exe 路径有效。
- 执行流程:2 未提供有效子命令时默认执行 scan。
- 执行流程:3 未提供工程路径时先执行 scan 搜索工程。
- 执行流程:4 发现多个工程或多个 preset 时列出选项让用户选择,绝不自动猜测。
- 执行流程:5 configure/build/rebuild/clean 按 operation_mode 决定是否需要确认。
- 执行流程:6 build 前自动检测是否已 configure,未配置时提示先执行 configure。
- 执行流程:7 build/rebuild 成功后返回 elf_file,供 jlink/openocd 继续使用。
- 执行流程:8 size 默认分析最近一次构建产物的 .elf 文件。
- 使用 gcc_project.py 扫描工程:python <skill-dir>/scripts/gcc_project.py scan --root <搜索目录> --json。
- 使用 gcc_project.py 列出 preset:python <skill-dir>/scripts/gcc_project.py presets --project <工程目录> --json。
- 使用 gcc_build.py 配置/编译/重建/清理:python <skill-dir>/scripts/gcc_build.py <configure|build|rebuild|clean> --cmake <cmake路径> --project <工程根目录> --preset <preset名称> --log-dir <日志目录> --json。
- 使用 gcc_size.py 基本分析:python <skill-dir>/scripts/gcc_size.py analyze --elf <elf文件路径> --toolchain-prefix arm-none-eabi- --linker-script <链接脚本路径> --json。
- 使用 gcc_size.py 对比分析:python <skill-dir>/scripts/gcc_size.py compare --elf <elf文件1> --compare <elf文件2> --toolchain-prefix arm-none-eabi- --json。
- 所有脚本以 JSON 格式返回,基础字段为 status(ok/error)、action、summary、details,并可能附带 context、artifacts、metrics、state、next_actions、timing。
- 成功时 status 为 ok,包含 action、summary、details、metrics 等;错误时 status 为 error,包含 action 和 error(code、message)。
- 不修改 CMakeLists.txt 或任何 CMake 配置文件。
- 当前 skill 仅覆盖 CMake 型 GCC 工程,不对纯 Makefile 工程做识别和构建。
- 不自动猜测工程路径或 preset,有歧义时必须询问用户。
- clean 不在自动流程中隐式执行。
- 构建失败时优先展示首个错误和日志文件路径。
- 结果回显中始终包含工程名、preset 名、构建目录路径;构建成功时优先回显 elf_file。
适用边界 · 注意事项
- 纯 Makefile 工程不适用,本 skill 仅覆盖 CMake 型 GCC 工程。
- 未安装或未正确配置 CMake 和 arm-none-eabi-gcc 工具链时无法使用。
- 需要修改 CMakeLists.txt 或任何 CMake 配置文件的场景不适用,本 skill 不修改这些文件。