其他
无 CMake/IDE 的裸 Makefile…
当嵌入式 MCU 工程只有 Makefile(无 CMakeLists.txt、platformio.ini、.uvprojx、.ewp)时,用自带脚本解析 Makefile、执行 make 并定位可烧录固件产物。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 49/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 85/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
无 CMake/IDE 的裸 Makef通用
解决思路
- 先阅读 references/usage.md,确认本次要做的是环境探测、解析 Makefile、列出目标、执行构建,还是仅扫描产物。
- 若不确定环境是否就绪,先运行自带脚本 scripts/makefile_builder.py 的 --detect 模式确认。
- 运行 --parse-makefile 检查解析出的变量和工具链信息,确认目标芯片和编译器。
- 若需查看可用目标,运行 --list-targets。
- 使用 --source 运行构建,按需指定 --target、--clean、--extra-args 和 -j。
- 读取脚本输出的构建结果和产物扫描报告,将产物路径写回 Project Profile 并交给下游 skill。
- 脚本启动即自动复用工程根目录 .em_skill.json 中上次成功的 profile 作为默认参数(显式参数优先,无需先手动传 --resume);仅当需要断言缓存必须存在时才传 --resume(无缓存则非零退出)。
- 无缓存或用户明确要求重新探测时,脚本自动回退到正常扫描。
- 若工作区根目录存在 Makefile / makefile / GNUmakefile,脚本自动识别。
- 解析 Makefile 变量:CROSS_COMPILE、CC、TARGET、MCU、BOARD、CFLAGS、LDFLAGS 等。
- 从 CROSS_COMPILE 前缀推断工具链家族(arm-none-eabi- → gnu-arm,riscv32-unknown-elf- → gnu-riscv,xtensa-esp32-elf- → gnu-esp)。
- 从 MCU 变量、-mcpu= 标志或链接脚本名推断目标芯片。
- 检测 make / gmake / mingw32-make 是否可用;Windows 上依次尝试 make、gmake、mingw32-make。
- 若 Makefile 包含 `# Generated by CMake`,提示用户改用 build-cmake skill。
- 缺少 make 或交叉编译器时,返回 environment-missing。
- Makefile 语法错误、链接失败或目标名无效时,返回 project-config-error。
- 构建成功但未在源目录及 build/、output/、out/ 中找到可烧录产物时,返回 artifact-missing。
- 工作区存在多个顶层 Makefile 且意图不明确时,返回 ambiguous-context。
- 输出构建命令、构建目录、解析的工具链信息和首选产物路径;构建目录保持为绝对路径,方便下游烧录和调试 skill 直接复用。
- 用 artifact_path、artifact_kind、toolchain 和 target_mcu 更新 Project Profile。
- 成功后推荐 flash-openocd、flash-jlink 或 debug-gdb-openocd。
- 下一步是给硬件烧录程序时,把成功构建结果交给 flash-openocd 或 flash-jlink;下一步需要符号信息或调试会话时,交给 debug-gdb-openocd 或 debug-jlink。
适用边界 · 注意事项
- 工程使用 CMake、PlatformIO、MDK(.uvprojx)或 IAR(.ewp)等构建系统,工作区不存在裸 Makefile。
- Makefile 由 CMake 生成(含 `# Generated by CMake`),应改用 build-cmake skill。
- 环境缺少 make 或对应交叉编译器(会返回 environment-missing)。