#!/bin/bash # 设置项目根目录 PROJECT_ROOT=$(pwd) # 设置构建目录 BUILD_DIR="$PROJECT_ROOT/build" # 设置生成的可执行文件路径和目标软链接路径 EXECUTABLE_PATH="$BUILD_DIR/App/console_pytorch/ISG_console_pytorch" TARGET_LINK="/usr/myapp/ISG" # 日志函数(带颜色) log_info() { echo -e "\033[32m[INFO]\033[0m $1" } log_error() { echo -e "\033[31m[ERROR]\033[0m $1" } log_warning() { echo -e "\033[33m[WARNING]\033[0m $1" } # 动态判断是否需要 sudo if [ "$EUID" -ne 0 ]; then SUDO="sudo" else SUDO="" fi # 清理构建目录 clean_build() { if [ -d "$BUILD_DIR" ]; then log_info "清理旧的构建目录..." rm -rf "$BUILD_DIR" else log_warning "构建目录不存在,无需清理。" fi } # 创建构建目录 create_build_dir() { log_info "创建新的构建目录..." mkdir -p "$BUILD_DIR" } # 执行 CMake 配置 run_cmake() { log_info "运行 CMake 配置..." cd "$BUILD_DIR" || { log_error "无法进入构建目录"; exit 1; } cmake .. || { log_error "CMake 配置失败"; exit 1; } } # 执行 Make 构建 run_make() { log_info "开始构建项目..." make -j$(nproc) || { log_error "构建失败"; exit 1; } log_info "构建完成!" } # 检查生成的可执行文件是否存在 check_executable_exists() { if [ ! -f "$EXECUTABLE_PATH" ]; then log_error "生成的可执行文件不存在: $EXECUTABLE_PATH" exit 1 fi } # 检查目标软链接是否存在,如果存在则删除 prepare_target_link() { if [ -L "$TARGET_LINK" ]; then log_warning "目标软链接已存在,正在删除: $TARGET_LINK" $SUDO rm -f "$TARGET_LINK" || { log_error "无法删除现有软链接"; exit 1; } elif [ -e "$TARGET_LINK" ]; then log_error "目标路径已存在且不是软链接: $TARGET_LINK" exit 1 fi } # 创建软链接 create_symlink() { log_info "正在创建软链接..." $SUDO ln -s "$EXECUTABLE_PATH" "$TARGET_LINK" || { log_error "创建软链接失败"; exit 1; } log_info "软链接已成功创建: $TARGET_LINK -> $EXECUTABLE_PATH" } # 主流程 main() { log_info "开始构建流程..." # 1. 清理旧的构建目录 clean_build # 2. 创建新的构建目录 create_build_dir # 3. 运行 CMake 配置 run_cmake # 4. 执行 Make 构建 run_make # 5. 检查生成的可执行文件是否存在 check_executable_exists # 6. 准备目标软链接并创建软链接 prepare_target_link create_symlink log_info "所有步骤完成!" } # 执行主流程 main