build-cmake
当需要配置或构建基于 CMake 的嵌入式固件工程,调用自带脚本执行构建并定位固件产物时使用。
By leokemp223 · 519 installs
npx skills add leokemp223/embed-ai-tool --skill build-cmake
Source repository · Upstream listing
构建 CMake 工程
适用场景
Project Profile 中标明 build system: cmake 。
用户希望对 CMake MCU 工程执行配置、重编译或确认固件产物。
烧录或调试流程需要新的 ELF 、 HEX 或 BIN 。
需要在构建前确认环境是否就绪(cmake、生成器、工具链)。
必要输入
工作区路径,或一份已有的 Project Profile 。
可选的构建预设、构建目录、目标名、生成器、构建类型和工具链文件。
自动探测
若存在 CMakePresets.json ,优先使用脚本的 list presets 列出并选择预设。
否则检查 CMakeLists.txt 、已有构建目录和工具链文件。
若已有成功的构建目录且与当前意图一致,优先复用。
脚本启动即自动读取 .em skill.json 中的 skill profiles.build cmake ,把上次成功构建参数作为默认值复用(显式参数优先,无需先手动传 resume ); resume 仅用于断言缓存必须存在,无缓存则非零退出。无缓存或用户要求重新探测时,脚本自动回退到 detect 、 list presets 或手动参数探索。
生成器由脚本自动探测,优先 Ninja ,其次是宿主机上已安装的 Make 工具。
对调试导向请求默认使用 Debug ,否则默认使用 RelWithDebInfo 。
执行步骤
1. 先阅读 [references/usage.md](references/usage.md),确认本次是执行构建、环境探测、列出预设,还是仅扫描产物。
2. 直接运行目标动作即可——脚本启动时会自动复用工程根目录 .em skill.json 中上次成功构建的源码目录、构建目录、预设、目标和产物信息(显式参数优先)。仅当需要断言缓存必须存在时才加 resume profile default 。
3. 若无缓存或用户要求重新探测,脚本自动回退到 detect 、 list presets 或手动参数探索。
4. 若存在 CMakePresets.json,使用 list presets 列出预设,再用 preset <name 构建。
5. 若无预设,使用 source 、 build dir 、 generator 、 build type 、 toolchain 手动配置构建。
6. 读取脚本输出的构建结果和产物扫描报告,重点关注首选产物(ELF HEX BIN)和失败分类。
7. 成功构建后脚本会自动更新工程根目录 .em skill.json 的 skill profiles.build cmake.default ;将构建目录、产物路径、产物类型和生成器信息同步到 Project Profile ,并在需要时交给下游 skill。
失败分流
当缺少 cmake 或所需生成器时,返回 environment missing 。
当配置或构建因预设损坏、缺失工具链文件或目标名无效而失败时,返回 project config error 。
当构建看似成功但未找到可烧录或可调试产物时,返回 artifact missing 。
当存在多个同样合理的预设或固件目标,且任意选择都不安全时,返回 ambiguous context 。
平台说明
在 Windows 上,除非工作区明确要求特定 Visual Studio shell,否则优先 Ninja ,避免依赖特定开发者命令环境。
自带脚本使用 Python 标准库和 subprocess 调用 cmake,因此构建调度路径本身是跨平台的。
输出中的构建目录应保持为绝对路径,方便下游烧录和调试 skill 直接复用。
输出约定
输出配置命令、构建命令、构建目录、所选生成器和首选产物路径。
成功构建后持久化 source 、 build dir 、 preset 、 generator 、 build type 、 toolchain 、 target 和首选产物到工程根目录 .em skill.json 。
用 artifact path 、 artifact kind 和探测到的工具链细节更新 Project Profile 。
成功后推荐 flash openocd 或 debug gdb openocd 。
交接关系
当下一步意图是给硬件烧录程序时,将成功构建结果交给 flash openocd 。
当下一步需要符号信息或调试会话时,将成功构建结果交给 debug gdb openocd 。