GrabBag/GrabBagPrj/buildArmPrj.sh
2026-01-03 22:28:04 +08:00

160 lines
4.0 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# 可用的 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)
# 清理编译目录
if [ "$CLEAN_BUILD" = true ]; then
echo "清理编译目录..."
rm -rf buildarm
FORCE_QMAKE=true
fi
mkdir -p buildarm/GrabBagPrj
cd buildarm/GrabBagPrj
# 交叉编译配置
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 "=========================================="
if [ -z "$TARGET_APP" ]; then
echo "编译失败!耗时: ${MINUTES}${SECONDS}"
else
echo "$TARGET_APP 编译失败!耗时: ${MINUTES}${SECONDS}"
fi
echo "=========================================="
exit 1
fi