GrabBag/GrabBagPrj/buildArmPrj.sh

160 lines
4.0 KiB
Bash
Raw Permalink Normal View History

#!/bin/bash
2026-01-03 22:28:04 +08:00
# 可用的 App 列表
AVAILABLE_APPS="GrabBag BeltTearing LapWeld Workpiece ParticleSize BinocularMark WorkpieceProject TunnelChannel WheelMeasure"
# 显示帮助信息
show_help() {
echo "用法: $0 [-r] [-q] [-h] [AppName]"
echo ""
echo "选项:"
echo " -r 清理编译目录后重新编译"
echo " -q 强制重新运行 qmake切换 App 时需要)"
echo " -h 显示此帮助信息"
echo ""
echo "参数:"
echo " AppName 指定要编译的 App 名称(可选,不指定则编译全部)"
echo ""
echo "可用的 App 列表:"
for app in $AVAILABLE_APPS; do
echo " - $app"
done
echo ""
echo "示例:"
echo " $0 # 编译全部项目(增量编译)"
echo " $0 -r # 清理后编译全部项目"
echo " $0 GrabBag # 只编译 GrabBag增量编译"
echo " $0 -q GrabBag # 切换到编译 GrabBag重新 qmake"
echo " $0 -r GrabBag # 清理后只编译 GrabBag"
}
# 检查 App 是否有效
is_valid_app() {
local app=$1
for valid_app in $AVAILABLE_APPS; do
if [ "$app" = "$valid_app" ]; then
return 0
fi
done
return 1
}
# 解析参数
CLEAN_BUILD=false
FORCE_QMAKE=false
TARGET_APP=""
while getopts "rqh" opt; do
case $opt in
r)
CLEAN_BUILD=true
;;
q)
FORCE_QMAKE=true
;;
h)
show_help
exit 0
;;
\?)
echo "无效选项: -$OPTARG"
show_help
exit 1
;;
esac
done
# 移除已处理的选项,获取剩余参数
shift $((OPTIND-1))
# 获取 App 名称参数
if [ -n "$1" ]; then
TARGET_APP=$1
if ! is_valid_app "$TARGET_APP"; then
echo "错误: 无效的 App 名称 '$TARGET_APP'"
echo ""
echo "可用的 App 列表:"
for app in $AVAILABLE_APPS; do
echo " - $app"
done
exit 1
fi
fi
START_TIME=$(date +%s)
2026-01-03 22:28:04 +08:00
# 清理编译目录
if [ "$CLEAN_BUILD" = true ]; then
echo "清理编译目录..."
rm -rf buildarm
2026-01-03 22:28:04 +08:00
FORCE_QMAKE=true
fi
mkdir -p buildarm/GrabBagPrj
cd buildarm/GrabBagPrj
2026-01-03 22:28:04 +08:00
# 交叉编译配置
QMAKE_ARGS=(
-r
CONFIG+=release
"MOC_DIR=moc"
"UI_DIR=ui"
"RCC_DIR=rcc"
"OBJECTS_DIR=obj"
"QMAKE_CC=aarch64-linux-gnu-gcc"
"QMAKE_CXX=aarch64-linux-gnu-g++"
"QMAKE_LINK=aarch64-linux-gnu-g++"
)
# 如果指定了 App添加 TARGET_APP 参数
if [ -n "$TARGET_APP" ]; then
QMAKE_ARGS+=("TARGET_APP=$TARGET_APP")
echo "=========================================="
echo "编译指定 App: $TARGET_APP"
echo "=========================================="
else
echo "=========================================="
echo "编译全部项目"
echo "=========================================="
fi
# 检查是否需要运行 qmake
if [ "$FORCE_QMAKE" = true ]; then
echo "运行 qmake..."
qmake "${QMAKE_ARGS[@]}" ../../GrabBagPrj.pro
elif [ ! -f "Makefile" ]; then
echo "Makefile 不存在,运行 qmake..."
qmake "${QMAKE_ARGS[@]}" ../../GrabBagPrj.pro
else
echo "跳过 qmake使用 -q 强制重新生成)"
fi
echo "开始编译..."
make -j8
BUILD_RESULT=$?
# 输出结果
END_TIME=$(date +%s)
ELAPSED=$((END_TIME - START_TIME))
MINUTES=$((ELAPSED / 60))
SECONDS=$((ELAPSED % 60))
if [ $BUILD_RESULT -eq 0 ]; then
echo "=========================================="
if [ -z "$TARGET_APP" ]; then
echo "全部项目编译成功!耗时: ${MINUTES}${SECONDS}"
else
echo "$TARGET_APP 编译成功!耗时: ${MINUTES}${SECONDS}"
fi
echo "=========================================="
else
echo "=========================================="
2026-01-03 22:28:04 +08:00
if [ -z "$TARGET_APP" ]; then
echo "编译失败!耗时: ${MINUTES}${SECONDS}"
else
echo "$TARGET_APP 编译失败!耗时: ${MINUTES}${SECONDS}"
fi
echo "=========================================="
exit 1
fi