#!/bin/bash set -euo pipefail ACTION="${1:-}" LINK_MODE="${2:-static}" BUILD_DIR="build" usage() { echo "用法:" echo " ./build.sh all [static|shared|embed] 配置并编译整个工程" echo " ./build.sh run 运行 build/test" echo " ./build.sh clean 清理 build 目录" } check_link_mode() { case "$1" in static|shared|embed) ;; *) echo "错误: 无效的 has_platform 接入模式 '$1'" usage exit 1 ;; esac } case "${ACTION}" in all) check_link_mode "${LINK_MODE}" mkdir -p "${BUILD_DIR}" rm -rf "${BUILD_DIR:?}/"* cmake -S . -B "${BUILD_DIR}" \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DHAS_PLATFORM_LINK_MODE="${LINK_MODE}" cmake --build "${BUILD_DIR}" -j"$(nproc)" ;; run) if [ ! -x "${BUILD_DIR}/test" ]; then echo "错误: 未找到 ${BUILD_DIR}/test,请先执行 ./build.sh all" exit 1 fi "${BUILD_DIR}/test" ;; clean) rm -rf "${BUILD_DIR}" ;; *) usage exit 1 ;; esac