# 设置默认 target
xt config --target windows/simulator
# 进入示例工程目录
cd examples\build_system\hook_demo
# --- 内置命令 ---
# 构建(hook 未拦截,走 xt-cli 内置 xmake 流程)
xt build
# --- 演示 1:特定 task 函数 + 解析 args ---
# 平台 hook 的 handle_flash 处理,--port 通过 self_args.port 获取
xt flash --port COM3
# 输出:
# [platform hook] flashing windows/simulator via COM3
# [platform hook] target_path: ...\platforms\windows\simulator
# [platform hook] project_dir: ...\examples\build_system\hook_demo
# --- 演示 2:BuildContext 字段 ---
# 平台 hook 的 handle_info,打印 context 所有字段
xt info
# 输出:
# [platform hook] --- BuildContext ---
# [platform hook] sdk_dir: ...\xt-sdk
# [platform hook] project_dir: ...\examples\build_system\hook_demo
# [platform hook] target: windows/simulator
# [platform hook] target_path: ...\platforms\windows\simulator
# [platform hook] platform_name: windows
# [platform hook] toolchain_path: C:\tools\mingw64\bin
# [platform hook] debug_enabled: False
# --- 演示 3:同名 task 优先级 ---
# 平台 hook 和工程 hook 都定义了 handle_greet
# 由于工程 hook > 平台 hook,由工程 hook 处理
xt greet
# 输出:
# [project hook] greet from ...\examples\build_system\hook_demo
# --- 演示 4:工程独有命令 ---
# 平台 hook 没有 handle_deploy,由工程 hook 处理
xt deploy --output dist
# 输出:
# [project hook] deploying from ...\examples\build_system\hook_demo
# [project hook] target: windows/simulator
# [project hook] output: dist
# --- 演示 5:通用 fallback ---
# 两个 hook 都没有 handle_unknown_task,走到工程 hook 的 handle() fallback
# handle() 返回 None,xt-cli 输出 "Unknown task: unknown_task"
xt unknown_task --foo bar
# 输出:
# [project hook] unhandled task: unknown_task, args: ['--foo', 'bar']
# Unknown task: unknown_task
# --- 演示 6:组合命令 ---
# 工程 hook 的 handle_project_release,通过 run_task 组合多个步骤
xt project_release
# 输出:
# [project hook] project_release: step 1 - build
# [project hook] project_release: step 2 - greet
# [project hook] greet from ...\examples\build_system\hook_demo
# --- 演示 7:生命周期 hook ---
# before_build 在 xmake 之前自动触发(工程 hook)
# after_build 在 xmake 之后自动触发(工程 hook)
xt build
# 输出:
# [project hook] before_build: preparing...
# ... (xmake build output) ...
# [project hook] after_build: build completed for windows/simulator