Addons 简介
Addon 扩展的是 xmake 本身。包(package)为你的程序提供库,而 addon 为构建工具本身提供新能力:命令、构建规则、工具链、工程模板和 lua 模块。
注意
Addon 目前需要 dev 分支的 xmake。在此之前只能分发插件,走的是旧的 xmake plugin --install。
Addon 能携带什么
一个 addon 可以携带一种或多种 载荷,每种都是可选的:
| 载荷 | 变成什么 | 怎么用 |
|---|---|---|
plugins/ | 一个新的 xmake 命令 | xmake monitor |
rules/ | 构建规则 | add_rules("@addon/esp32-devel/app") |
toolchains/ | 工具链 | set_toolchains("@addon/esp32-devel/esp32") |
templates/ | 工程模板 | xmake create -t esp32.blink |
modules/ | 可导入的 lua 模块 | import("@addon.serial-tools.serial") |
includes/ | 可包含的配置片段 | includes("@addon/esp32-devel/board") |
所以一个 addon 可以是一整套开发工具包:esp32-devel 携带了交叉工具链、构建规则、烧写逻辑和 blink 模板 —— 装上它,xmake 就变成了 ESP32 的 SDK。
整体架构
xmake-repo github / 本地目录
addons/e/esp32-devel/xmake.lua github:user/my-addon
│
xmake addon --install <name>
↓
~/.xmake/addons/<name>/<version>/{plugins,rules,toolchains,templates,modules,includes}
~/.xmake/addons/addons.conf ← 启动时读取的注册表
↓
工程按需引用其中的载荷
add_addons("esp32-devel") + @addon/esp32-devel/app这个结构带来三个特性:
按用户安装一次。 Addon 装在 ~/.xmake/addons,不在工程里。多个工程共享同一份安装,而注册表文件让 xmake 不必每次运行都去扫描目录。
载荷是带命名空间的。 规则、工具链、includes 和模块统一通过 @addon/<name>/... 引用,所以两个 addon 永远不会撞车。插件和模板是例外 —— 命令名是全局的,因此 xmake 会拒绝那些会覆盖别的 addon 命令的安装。
Addon 自己定义自己的名字。 名字写在 addon 仓库的 addon.lua 里,所以它不依赖仓库名,也不依赖分发它的那个包名。
lua
-- addon.lua
addon("esp32-devel")
set_homepage("https://github.com/xmake-addons/esp32-devel")
set_description("The ESP32 development addon.")
set_license("Apache-2.0")
set_sourcedir("src")
add_deps("serial-tools")Addon、插件和包的区别
| 安装方式 | 安装位置 | 扩展的是 | |
|---|---|---|---|
| 包 | add_requires / xrepo install | ~/.xmake/packages | 你的程序(库、头文件、工具) |
| 插件(旧) | xmake plugin --install | ~/.xmake/plugins | xmake,仅命令 |
| Addon | xmake addon --install / add_addons | ~/.xmake/addons | xmake,所有载荷类型 |
Addon 以 set_kind("addon") 的包形式分发,所以完整复用了包的基础设施:仓库、版本、sha256 校验、依赖关系和 xrepo 的下载逻辑。
下一步
- 安装和使用 ——
xmake addon的各个子命令和add_addons - 编写 Addon —— manifest、载荷和提交到 xmake-repo
- xmake-harness —— AI Agent 扩展包
xmake ai