You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

116 lines
2.6 KiB

#!/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