用途:在无 CMake 或 IDE 的裸 Makefile 嵌入式固件工程中执行编译并定位可烧录产物。适用于 Project Profile 标明 build_system: makefile、工作区存在 Makefile/makefile/GNUmakefile 但无 CMakeLists.txt、platformio.ini、.uvprojx 或 .ewp 的情况,也适用于烧录或调试前需要新 ELF、HEX、BIN 的场景。
必要输入:工作区路径或已有的 Project Profile;可选 make 目标名、额外变量(如 CROSS_COMPILE、MCU)、make 标志和并行任务数。
自动探测:脚本启动即自动复用工程根目录 .em_skill.json 中上次成功的 profile 作为默认参数(显式参数优先),--resume 仅用于断言缓存必须存在;无缓存或要求重新探测时回退到正常扫描。会解析 CROSS_COMPILE、CC、TARGET、MCU、BOARD、CFLAGS、LDFLAGS 等变量,推断工具链家族与目标芯片,检测 make/gmake/mingw32-make 是否可用;若 Makefile 含 # Generated by CMake 会提示改用 build-cmake。
使用方式:先阅读 references/usage.md 确认操作类型;运行 scripts/makefile_builder.py 的 --detect 确认环境,--parse-makefile 检查变量与工具链,--list-targets 查看目标,再用 --source 配合 --target、--clean、--extra-args 和 -j 执行构建;读取构建结果与产物扫描报告,将产物路径写回 Project Profile。
输出与失败分流:输出构建命令、构建目录、工具链信息和首选产物路径,并用 artifact_path、artifact_kind、toolchain、target_mcu 更新 Project Profile。缺少 make 或交叉编译器返回 environment-missing;Makefile 语法错误、链接失败或目标名无效返回 project-config-error;构建成功但未在源目录及 build/、output/、out/ 找到产物返回 artifact-missing;多个顶层 Makefile 意图不明返回 ambiguous-context。成功后可交给 flash-openocd、flash-jlink 或 debug-gdb-openocd、debug-jlink。
平台与限制:Linux/macOS 通常已预装 make,Windows 需 MSYS2、MinGW 或 WSL,脚本依次尝试 make、gmake、mingw32-make;构建目录应保持绝对路径。其余细节暂未提供。