2025-12-18 21:36:41 +08:00
|
|
|
|
#!/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
|
|
|
|
|
|
|
2025-12-18 21:36:41 +08:00
|
|
|
|
START_TIME=$(date +%s)
|
|
|
|
|
|
|
2026-01-03 22:28:04 +08:00
|
|
|
|
# 清理编译目录
|
|
|
|
|
|
if [ "$CLEAN_BUILD" = true ]; then
|
|
|
|
|
|
echo "清理编译目录..."
|
2025-12-18 21:36:41 +08:00
|
|
|
|
rm -rf buildarm
|
2026-01-03 22:28:04 +08:00
|
|
|
|
FORCE_QMAKE=true
|
2025-12-18 21:36:41 +08:00
|
|
|
|
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
|
2025-12-18 21:36:41 +08:00
|
|
|
|
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
|
2025-12-18 21:36:41 +08:00
|
|
|
|
echo "=========================================="
|
|
|
|
|
|
exit 1
|
|
|
|
|
|
fi
|