#!/bin/bash # FunMC 构建脚本 (Linux/macOS) # 用于构建所有组件 set -e SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" ROOT_DIR="$(dirname "$SCRIPT_DIR")" TARGET="all" RELEASE=false BUNDLE=false print_usage() { echo "用法: $0 [选项]" echo "" echo "选项:" echo " -t, --target 构建目标 (all, client, server, relay) [默认: all]" echo " -r, --release 构建发布版本" echo " -b, --bundle 打包客户端安装包" echo " -h, --help 显示帮助信息" } while [[ $# -gt 0 ]]; do case $1 in -t|--target) TARGET="$2" shift 2 ;; -r|--release) RELEASE=true shift ;; -b|--bundle) BUNDLE=true shift ;; -h|--help) print_usage exit 0 ;; *) echo "未知选项: $1" print_usage exit 1 ;; esac done log_step() { echo -e "\n\033[36m==> $1\033[0m" } log_success() { echo -e "\033[32m$1\033[0m" } build_server() { log_step "构建主服务端..." cd "$ROOT_DIR/server" if $RELEASE; then cargo build --release else cargo build fi log_success "主服务端构建完成!" } build_relay() { log_step "构建中继服务端..." cd "$ROOT_DIR/relay-server" if $RELEASE; then cargo build --release else cargo build fi log_success "中继服务端构建完成!" } build_client() { log_step "构建客户端..." cd "$ROOT_DIR/client" # 安装前端依赖 echo "安装前端依赖..." cd ui npm install cd .. # 构建 Tauri 应用 if $BUNDLE; then if $RELEASE; then cargo tauri build else cargo tauri build --debug fi else if $RELEASE; then cargo build --release else cargo build fi fi log_success "客户端构建完成!" } echo -e "\033[33mFunMC 构建系统\033[0m" echo "===============" case $TARGET in all) build_server build_relay build_client ;; client) build_client ;; server) build_server ;; relay) build_relay ;; *) echo "无效的构建目标: $TARGET" exit 1 ;; esac echo -e "\n\033[32m所有构建完成!\033[0m" if $BUNDLE && [[ "$TARGET" == "all" || "$TARGET" == "client" ]]; then echo -e "\n\033[33m客户端安装包位置:\033[0m" echo "$ROOT_DIR/client/target/release/bundle/" fi