#!/bin/bash # ============================================ # AGV 项目快速构建脚本 # ============================================ # # 功能: # 1. 自动设置环境并编译项目 # 2. 自动复制 Qt/MinGW 依赖到 build 目录 # 3. 编译后可直接双击 build/agv_qt_gui.exe 运行 # # 使用:./build.sh [clean] # # ============================================ set -e # 遇到错误立即退出 # ==================== 配置区域 ==================== # Qt 和 MinGW 路径 QT_DIR="/c/Qt/6.10.1/mingw_64" MINGW_DIR="/c/Qt/Tools/mingw1310_64" # 项目路径 PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" BUILD_DIR="$PROJECT_ROOT/build" # 颜色定义 GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # ==================== 函数定义 ==================== print_step() { echo -e "${GREEN}[✓]${NC} $1" } print_info() { echo -e "${BLUE}[→]${NC} $1" } print_warning() { echo -e "${YELLOW}[!]${NC} $1" } # ==================== 主流程 ==================== echo "" echo -e "${BLUE}========================================${NC}" echo -e "${BLUE} AGV 项目构建脚本${NC}" echo -e "${BLUE}========================================${NC}" echo "" # 检查参数 if [ "$1" == "clean" ]; then print_info "清理 build 目录..." rm -rf "$BUILD_DIR" print_step "清理完成" echo "" fi # 创建 build 目录 if [ ! -d "$BUILD_DIR" ]; then print_info "创建 build 目录..." mkdir -p "$BUILD_DIR" fi # 设置 PATH print_info "设置 MinGW 环境..." export PATH="$MINGW_DIR/bin:$PATH" # CMake 配置 print_info "运行 CMake 配置..." cd "$BUILD_DIR" cmake -G "MinGW Makefiles" -DCMAKE_PREFIX_PATH="$QT_DIR" .. print_step "CMake 配置完成" echo "" # 编译 print_info "开始编译项目..." cmake --build . -j4 echo "" print_step "编译完成!" echo "" # 复制依赖到 build 目录,使得可以直接双击运行 print_info "正在复制运行时依赖到 build 目录..." # 复制 Qt 核心库 cp "$QT_DIR/bin/Qt6Core.dll" "$BUILD_DIR/" 2>/dev/null || true cp "$QT_DIR/bin/Qt6Gui.dll" "$BUILD_DIR/" 2>/dev/null || true cp "$QT_DIR/bin/Qt6Widgets.dll" "$BUILD_DIR/" 2>/dev/null || true cp "$QT_DIR/bin/Qt6Network.dll" "$BUILD_DIR/" 2>/dev/null || true cp "$QT_DIR/bin/Qt6Svg.dll" "$BUILD_DIR/" 2>/dev/null || true # 复制 MinGW 运行时 cp "$MINGW_DIR/bin/libgcc_s_seh-1.dll" "$BUILD_DIR/" 2>/dev/null || true cp "$MINGW_DIR/bin/libstdc++-6.dll" "$BUILD_DIR/" 2>/dev/null || true cp "$MINGW_DIR/bin/libwinpthread-1.dll" "$BUILD_DIR/" 2>/dev/null || true # 复制 Qt 平台插件 mkdir -p "$BUILD_DIR/platforms" cp "$QT_DIR/plugins/platforms/qwindows.dll" "$BUILD_DIR/platforms/" 2>/dev/null || true # 复制样式插件 mkdir -p "$BUILD_DIR/styles" cp "$QT_DIR/plugins/styles/qmodernwindowsstyle.dll" "$BUILD_DIR/styles/" 2>/dev/null || true # 复制图标引擎 mkdir -p "$BUILD_DIR/iconengines" cp "$QT_DIR/plugins/iconengines/qsvgicon.dll" "$BUILD_DIR/iconengines/" 2>/dev/null || true # 复制图像格式插件 mkdir -p "$BUILD_DIR/imageformats" cp "$QT_DIR/plugins/imageformats/qgif.dll" "$BUILD_DIR/imageformats/" 2>/dev/null || true cp "$QT_DIR/plugins/imageformats/qjpeg.dll" "$BUILD_DIR/imageformats/" 2>/dev/null || true cp "$QT_DIR/plugins/imageformats/qsvg.dll" "$BUILD_DIR/imageformats/" 2>/dev/null || true # 复制 OpenGL 软件渲染器 cp "$QT_DIR/bin/opengl32sw.dll" "$BUILD_DIR/" 2>/dev/null || true # 复制项目特定库 if [ -f "$PROJECT_ROOT/lib/ControlCAN.dll" ]; then cp "$PROJECT_ROOT/lib/ControlCAN.dll" "$BUILD_DIR/" 2>/dev/null || true fi print_step "依赖库已复制到 build 目录" echo "" # 显示生成的可执行文件 echo "生成的可执行文件:" echo " • build/agv_qt_gui.exe (Qt6 图形界面)" echo " • build/curtis_demo.exe (Curtis 控制器演示)" echo " • build/curtis_path_tracking_demo.exe (Curtis 路径跟踪)" echo " • build/agv_demo.exe (控制台演示)" echo "" echo -e "${YELLOW}下一步:${NC}" echo " 1. 运行 Qt GUI: 双击 build/agv_qt_gui.exe 或 cd build && ./agv_qt_gui.exe" echo " 2. 部署应用: ./deploy_windows.sh" echo ""