#!/bin/bash set -u set -o pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" BUILD_DIR="${SCRIPT_DIR}/buildarm/GrabBagPrj" source "${SCRIPT_DIR}/project_registry.sh" show_help() { cat <<'EOF' 用法: ./buildArmPrj.sh [-r] [-q] [-h] [AppName] 选项: -r 删除 buildarm 后重新编译 -q 强制重新执行 qmake -h 显示帮助 参数: AppName 可选的编译目标;不传则编译全部 可编译目标: EOF list_projects | sed 's/^/ - /' } 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 ;; *) show_help exit 1 ;; esac done shift $((OPTIND - 1)) if [ $# -gt 1 ]; then show_help exit 1 fi if [ $# -eq 1 ]; then TARGET_APP="$1" if ! is_project "${TARGET_APP}"; then echo "无效的编译目标: ${TARGET_APP}" >&2 echo >&2 show_help >&2 exit 1 fi fi START_TIME=$(date +%s) if [ "${CLEAN_BUILD}" = true ]; then echo "清理 ${SCRIPT_DIR}/buildarm" rm -rf "${SCRIPT_DIR}/buildarm" FORCE_QMAKE=true fi mkdir -p "${BUILD_DIR}" cd "${BUILD_DIR}" 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++" ) if [ -n "${TARGET_APP}" ]; then QMAKE_ARGS+=("TARGET_APP=${TARGET_APP}") echo "编译目标: ${TARGET_APP}" else echo "编译全部目标" fi if [ "${FORCE_QMAKE}" = true ] || [ ! -f "${BUILD_DIR}/Makefile" ]; then echo "执行 qmake" if ! qmake "${QMAKE_ARGS[@]}" "${SCRIPT_DIR}/GrabBagPrj.pro"; then echo "qmake 执行失败" >&2 exit 1 fi else echo "跳过 qmake" fi JOBS="${JOBS:-$(getconf _NPROCESSORS_ONLN 2>/dev/null || echo 8)}" echo "==========================================" echo "执行 make -j${JOBS}" BUILD_RESULT=0 make -j"${JOBS}" || BUILD_RESULT=$? END_TIME=$(date +%s) ELAPSED=$((END_TIME - START_TIME)) MINUTES=$((ELAPSED / 60)) SECONDS=$((ELAPSED % 60)) if [ "${BUILD_RESULT}" -eq 0 ]; then if [ -n "${TARGET_APP}" ]; then echo "${TARGET_APP} 编译成功,耗时 ${MINUTES} 分 ${SECONDS} 秒" else echo "全部目标编译成功,耗时 ${MINUTES} 分 ${SECONDS} 秒" fi exit 0 fi if [ -n "${TARGET_APP}" ]; then echo "${TARGET_APP} 编译失败,耗时 ${MINUTES} 分 ${SECONDS} 秒" >&2 else echo "编译失败,耗时 ${MINUTES} 分 ${SECONDS} 秒" >&2 fi exit "${BUILD_RESULT}"