refactor(build): 重构构建脚本并改进错误处理
This commit is contained in:
parent
e5fafd132b
commit
85697b1fd4
@ -1,51 +1,38 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 可用的 App 列表
|
||||
AVAILABLE_APPS="GrabBag BeltTearing LapWeld Workpiece ParticleSize BinocularMark WorkpieceProject TunnelChannel WheelMeasure ScrewPosition WorkpieceHole BagThreadPosition StatorPosition HoleDetection HolePitPosition RodAndBarPosition"
|
||||
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() {
|
||||
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"
|
||||
cat <<'EOF'
|
||||
用法:
|
||||
./buildArmPrj.sh [-r] [-q] [-h] [AppName]
|
||||
|
||||
选项:
|
||||
-r 删除 buildarm 后重新编译
|
||||
-q 强制重新执行 qmake
|
||||
-h 显示帮助
|
||||
|
||||
参数:
|
||||
AppName 可选的编译目标;不传则编译全部
|
||||
|
||||
可编译目标:
|
||||
EOF
|
||||
|
||||
list_projects | sed 's/^/ - /'
|
||||
}
|
||||
|
||||
# 检查 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
|
||||
case "$opt" in
|
||||
r)
|
||||
CLEAN_BUILD=true
|
||||
;;
|
||||
@ -56,44 +43,41 @@ while getopts "rqh" opt; do
|
||||
show_help
|
||||
exit 0
|
||||
;;
|
||||
\?)
|
||||
echo "无效选项: -$OPTARG"
|
||||
*)
|
||||
show_help
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# 移除已处理的选项,获取剩余参数
|
||||
shift $((OPTIND-1))
|
||||
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
|
||||
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 "清理编译目录..."
|
||||
rm -rf buildarm
|
||||
if [ "${CLEAN_BUILD}" = true ]; then
|
||||
echo "清理 ${SCRIPT_DIR}/buildarm"
|
||||
rm -rf "${SCRIPT_DIR}/buildarm"
|
||||
FORCE_QMAKE=true
|
||||
fi
|
||||
|
||||
mkdir -p buildarm/GrabBagPrj
|
||||
cd buildarm/GrabBagPrj
|
||||
mkdir -p "${BUILD_DIR}"
|
||||
cd "${BUILD_DIR}"
|
||||
|
||||
# 交叉编译配置
|
||||
QMAKE_ARGS=(
|
||||
-r
|
||||
CONFIG+=release
|
||||
@ -106,54 +90,49 @@ QMAKE_ARGS=(
|
||||
"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 "=========================================="
|
||||
if [ -n "${TARGET_APP}" ]; then
|
||||
QMAKE_ARGS+=("TARGET_APP=${TARGET_APP}")
|
||||
echo "编译目标: ${TARGET_APP}"
|
||||
else
|
||||
echo "=========================================="
|
||||
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
|
||||
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(使用 -q 强制重新生成)"
|
||||
echo "跳过 qmake"
|
||||
fi
|
||||
|
||||
echo "开始编译..."
|
||||
make -j8
|
||||
BUILD_RESULT=$?
|
||||
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
|
||||
echo "=========================================="
|
||||
if [ -z "$TARGET_APP" ]; then
|
||||
echo "全部项目编译成功!耗时: ${MINUTES}分${SECONDS}秒"
|
||||
if [ "${BUILD_RESULT}" -eq 0 ]; then
|
||||
if [ -n "${TARGET_APP}" ]; then
|
||||
echo "${TARGET_APP} 编译成功,耗时 ${MINUTES} 分 ${SECONDS} 秒"
|
||||
else
|
||||
echo "$TARGET_APP 编译成功!耗时: ${MINUTES}分${SECONDS}秒"
|
||||
echo "全部目标编译成功,耗时 ${MINUTES} 分 ${SECONDS} 秒"
|
||||
fi
|
||||
echo "=========================================="
|
||||
else
|
||||
echo "=========================================="
|
||||
if [ -z "$TARGET_APP" ]; then
|
||||
echo "编译失败!耗时: ${MINUTES}分${SECONDS}秒"
|
||||
else
|
||||
echo "$TARGET_APP 编译失败!耗时: ${MINUTES}分${SECONDS}秒"
|
||||
fi
|
||||
echo "=========================================="
|
||||
exit 1
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [ -n "${TARGET_APP}" ]; then
|
||||
echo "${TARGET_APP} 编译失败,耗时 ${MINUTES} 分 ${SECONDS} 秒" >&2
|
||||
else
|
||||
echo "编译失败,耗时 ${MINUTES} 分 ${SECONDS} 秒" >&2
|
||||
fi
|
||||
|
||||
exit "${BUILD_RESULT}"
|
||||
|
||||
@ -98,19 +98,32 @@ read_project_version() {
|
||||
PROJECT_VERSION="$DEFAULT_VERSION_STRING"
|
||||
PROJECT_BUILD="$DEFAULT_BUILD_NUMBER"
|
||||
|
||||
[ ! -f "$version_file" ] && return 0
|
||||
if [ ! -f "$version_file" ]; then
|
||||
echo "错误: 版本文件不存在: $version_file" >&2
|
||||
return 1
|
||||
fi
|
||||
|
||||
for candidate in "${version_macro}_VERSION_STRING" "${version_macro}_APP_VERSION_STRING"; do
|
||||
value=$(grep -E "^#define[[:space:]]+${candidate}[[:space:]]+\"" "$version_file" | sed -E 's/.*"([^"]+)".*/\1/' | head -n 1 || true)
|
||||
if [ -n "$value" ]; then PROJECT_VERSION="$value"; break; fi
|
||||
done
|
||||
[ -z "$PROJECT_VERSION" ] && PROJECT_VERSION="$DEFAULT_VERSION_STRING"
|
||||
|
||||
if [ -z "$PROJECT_VERSION" ]; then
|
||||
echo "错误: 版本文件中未定义版本字符串" >&2
|
||||
return 1
|
||||
fi
|
||||
|
||||
for candidate in "${version_macro}_BUILD_STRING" "${version_macro}_VERSION_BUILD" "${version_macro}_APP_VERSION_BUILD"; do
|
||||
value=$(grep -E "^#define[[:space:]]+${candidate}[[:space:]]+\"" "$version_file" | sed -E 's/.*"([^"]+)".*/\1/' | head -n 1 || true)
|
||||
if [ -n "$value" ]; then PROJECT_BUILD="$value"; break; fi
|
||||
done
|
||||
[ -z "$PROJECT_BUILD" ] && PROJECT_BUILD="$DEFAULT_BUILD_NUMBER"
|
||||
|
||||
if [ -z "$PROJECT_BUILD" ]; then
|
||||
echo "错误: 版本文件中未定义构建号" >&2
|
||||
return 1
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
# ===== 内部注册函数 =====
|
||||
|
||||
@ -313,8 +313,10 @@ set_permissions() {
|
||||
# 加载打包上下文:参数解析 + meta 加载 + 派生变量计算
|
||||
# 用法: load_package_context "$@" "desktop" 或 load_package_context "$@" "service"
|
||||
load_package_context() {
|
||||
|
||||
local expected_kind="${!#}" # 最后一个参数是期望的 kind
|
||||
local args=("${@:1:$#-1}") # 去掉最后一个参数
|
||||
echo "开始加载 ${expected_kind} 上下文"
|
||||
|
||||
if [ ${#args[@]} -eq 1 ] && [ "${args[0]}" = "--list" ]; then
|
||||
list_projects_by_kind "${expected_kind}"
|
||||
@ -332,6 +334,7 @@ load_package_context() {
|
||||
fi
|
||||
|
||||
PACKAGE_TARGET="${args[0]}"
|
||||
echo "加载项目 ${PACKAGE_TARGET} 上下文"
|
||||
|
||||
if ! load_package_project_meta "${PACKAGE_TARGET}"; then
|
||||
echo "未知项目: ${PACKAGE_TARGET}" >&2
|
||||
@ -347,9 +350,13 @@ load_package_context() {
|
||||
|
||||
apply_package_defaults
|
||||
|
||||
echo "读取 ${PACKAGE_TARGET} 版本信息"
|
||||
|
||||
VERSION_FILE="${REPO_DIR}/${PACKAGE_VERSION_FILE_REL}"
|
||||
read_project_version "${VERSION_FILE}" "${PACKAGE_VERSION_MACRO}"
|
||||
|
||||
echo "生成 ${expected_kind} 打包名称"
|
||||
|
||||
PKG_VERSION="${PROJECT_VERSION}"
|
||||
BUILD_NUMBER="${PROJECT_BUILD}"
|
||||
PKG_RELEASE_VERSION="${PKG_VERSION}.${BUILD_NUMBER}"
|
||||
@ -361,6 +368,7 @@ load_package_context() {
|
||||
EXEC_INSTALL_PATH="/${PACKAGE_BINARY_DEST_REL}"
|
||||
ICON_INSTALL_PATH="/${PACKAGE_ICON_DEST_REL}"
|
||||
SERVICE_INSTALL_DIR="/opt/${PACKAGE_SLUG}"
|
||||
echo "加载项目 ${PACKAGE_TARGET} 上下文完成"
|
||||
|
||||
if [ -n "${PACKAGE_SERVICE_DEST_REL}" ]; then
|
||||
SERVICE_INSTALL_PATH="/${PACKAGE_SERVICE_DEST_REL}"
|
||||
|
||||
@ -132,6 +132,7 @@ EOF
|
||||
|
||||
# ===== 主流程 =====
|
||||
load_package_context "$@" "desktop"
|
||||
echo "开始打包桌面应用 ${PACKAGE_NAME}"
|
||||
run_common_packaging_steps
|
||||
log_info "写入桌面集成脚本"
|
||||
write_desktop_autostart
|
||||
|
||||
@ -51,7 +51,7 @@ DESKTOP_PROJECTS=(
|
||||
extra_copy=glob|SDK/Device/gl_linelaser_sdk/aarch64_linux/*.so|usr/lib"
|
||||
|
||||
"HoleDetection;holeDetection;\
|
||||
algo_copy=globa|AppAlgo/holeDetection/arm/release/libHoleDetectionLib.so*|usr/lib"
|
||||
algo_copy=globa|AppAlgo/holeDetection/arm/release/*.so*|usr/lib"
|
||||
|
||||
"TunnelChannel;channelSpaceMeasure;\
|
||||
ld_conf=/usr/lib/HCNetSDKCom;\
|
||||
|
||||
@ -1,195 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 更新应用列表及说明.md中的版本信息
|
||||
# 用法: ./updateVersion.sh <项目名称>
|
||||
# 示例: ./updateVersion.sh GrabBag
|
||||
|
||||
# 定义项目与Version.h文件的映射关系
|
||||
declare -A PROJECT_VERSION_FILES=(
|
||||
["GrabBag"]="App/GrabBag/GrabBagApp/Version.h"
|
||||
["BeltTearing"]="App/BeltTearing/BeltTearingApp/Version.h"
|
||||
["LapWeld"]="App/LapWeld/LapWeldApp/Version.h"
|
||||
["Workpiece"]="App/Workpiece/WorkpieceApp/Version.h"
|
||||
["ParticleSize"]="App/ParticleSize/ParticleSizeApp/Version.h"
|
||||
["BinocularMark"]="App/BinocularMark/BinocularMarkApp/Version.h"
|
||||
["WorkpieceProject"]="App/WorkpieceProject/WorkpiecePositionApp/Version.h"
|
||||
["TunnelChannel"]="App/TunnelChannel/TunnelChannelApp/Version.h"
|
||||
["WheelMeasure"]="App/WheelMeasure/WheelMeasureApp/Version.h"
|
||||
["ScrewPosition"]="App/ScrewPosition/ScrewPositionApp/Version.h"
|
||||
["BagThreadPosition"]="App/BagThreadPosition/BagThreadPositionApp/Version.h"
|
||||
["WorkpieceHole"]="App/WorkpieceHole/WorkpieceHoleApp/Version.h"
|
||||
["StatorPosition"]="App/StatorPosition/StatorPositionApp/Version.h"
|
||||
["HoleDetection"]="App/HoleDetection/HoleDetectionApp/Version.h"
|
||||
["HolePitPosition"]="App/HolePitPosition/HolePitPositionApp/Version.h"
|
||||
["RodAndBarPosition"]="App/RodAndBarPosition/RodAndBarPositionApp/Version.h"
|
||||
)
|
||||
|
||||
# 定义项目与版本宏的映射关系
|
||||
declare -A PROJECT_VERSION_MACROS=(
|
||||
["GrabBag"]="GRABBAG"
|
||||
["BeltTearing"]="BELT_TEARING_APP"
|
||||
["LapWeld"]="LAPWELD"
|
||||
["Workpiece"]="WORKPIECE"
|
||||
["ParticleSize"]="PARTICLESIZE"
|
||||
["BinocularMark"]="BINOCULARMARK"
|
||||
["WorkpieceProject"]="WORKPIECE_POSITION"
|
||||
["TunnelChannel"]="TUNNELCHANNEL"
|
||||
["WheelMeasure"]="WHEELMEASURE"
|
||||
["ScrewPosition"]="SCREWPOSITION"
|
||||
["BagThreadPosition"]="BAGTHREADPOSITION"
|
||||
["WorkpieceHole"]="WORKPIECEHOLE"
|
||||
["StatorPosition"]="STATORPOSITION"
|
||||
["HoleDetection"]="HOLEDETECTION"
|
||||
["HolePitPosition"]="HOLEPITPOSITION"
|
||||
["RodAndBarPosition"]="RODANDBARPOSITION"
|
||||
)
|
||||
|
||||
# 定义项目与Publish包名称的映射关系
|
||||
declare -A PROJECT_PUBLISH_NAMES=(
|
||||
["GrabBag"]="GrabBag"
|
||||
["BeltTearing"]="BeltTearingServer"
|
||||
["LapWeld"]="LapWeld"
|
||||
["Workpiece"]="Workpiece"
|
||||
["ParticleSize"]="ParticleSize"
|
||||
["BinocularMark"]="BinocularMarkServer"
|
||||
["WorkpieceProject"]="WorkpieceProject"
|
||||
["TunnelChannel"]="TunnelChannel"
|
||||
["WheelMeasure"]="WheelMeasure"
|
||||
["ScrewPosition"]="ScrewPosition"
|
||||
["BagThreadPosition"]="BagThreadPosition"
|
||||
["WorkpieceHole"]="WorkpieceHole"
|
||||
["StatorPosition"]="StatorPosition"
|
||||
["HoleDetection"]="HoleDetection"
|
||||
["HolePitPosition"]="HolePitPosition"
|
||||
["RodAndBarPosition"]="RodAndBarPosition"
|
||||
)
|
||||
|
||||
# 定义项目与中文名称的映射关系
|
||||
declare -A PROJECT_CHINESE_NAMES=(
|
||||
["GrabBag"]="自动拆包"
|
||||
["BeltTearing"]="皮带撕裂"
|
||||
["LapWeld"]="焊接"
|
||||
["Workpiece"]="工件定位"
|
||||
["ParticleSize"]="颗粒尺寸检测"
|
||||
["BinocularMark"]="双目标记检测"
|
||||
["WorkpieceProject"]="工件项目"
|
||||
["TunnelChannel"]="铁路隧道槽道测量"
|
||||
["WheelMeasure"]="车轮拱高测量"
|
||||
["ScrewPosition"]="螺杆定位"
|
||||
["BagThreadPosition"]="包裹拆线位置定位"
|
||||
["WorkpieceHole"]="工件孔定位"
|
||||
["StatorPosition"]="定子定位"
|
||||
["HoleDetection"]="孔洞检测"
|
||||
["HolePitPosition"]="坑孔定位"
|
||||
["RodAndBarPosition"]="棒材定位"
|
||||
)
|
||||
|
||||
# 应用列表文件路径
|
||||
APP_LIST_FILE="AppList.md"
|
||||
|
||||
# 获取脚本所在目录
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
cd "$SCRIPT_DIR"
|
||||
|
||||
# 检查参数
|
||||
if [ $# -eq 0 ]; then
|
||||
echo "用法: $0 <项目名称>"
|
||||
echo "示例: $0 GrabBag"
|
||||
echo ""
|
||||
echo "可用项目名称:"
|
||||
for project in "${!PROJECT_VERSION_FILES[@]}"; do
|
||||
echo " - $project (${PROJECT_CHINESE_NAMES[$project]})"
|
||||
done
|
||||
exit 1
|
||||
fi
|
||||
|
||||
PROJECT_NAME=$1
|
||||
|
||||
# 检查项目是否存在
|
||||
if [ -z "${PROJECT_VERSION_FILES[$PROJECT_NAME]}" ]; then
|
||||
echo "错误: 未知的项目名称 '$PROJECT_NAME'"
|
||||
echo "可用项目名称:"
|
||||
for project in "${!PROJECT_VERSION_FILES[@]}"; do
|
||||
echo " - $project (${PROJECT_CHINESE_NAMES[$project]})"
|
||||
done
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 获取Version.h文件路径
|
||||
VERSION_FILE="../${PROJECT_VERSION_FILES[$PROJECT_NAME]}"
|
||||
VERSION_MACRO="${PROJECT_VERSION_MACROS[$PROJECT_NAME]}"
|
||||
PUBLISH_NAME="${PROJECT_PUBLISH_NAMES[$PROJECT_NAME]}"
|
||||
CHINESE_NAME="${PROJECT_CHINESE_NAMES[$PROJECT_NAME]}"
|
||||
|
||||
echo "=========================================="
|
||||
echo "更新项目版本信息"
|
||||
echo "=========================================="
|
||||
echo "项目名称: $PROJECT_NAME ($CHINESE_NAME)"
|
||||
echo "发布名称: $PUBLISH_NAME"
|
||||
echo "Version.h: $VERSION_FILE"
|
||||
echo "=========================================="
|
||||
|
||||
# 检查Version.h文件是否存在
|
||||
if [ ! -f "$VERSION_FILE" ]; then
|
||||
echo "错误: Version.h 文件不存在: $VERSION_FILE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 读取版本信息
|
||||
# 尝试多种可能的宏定义格式
|
||||
VERSION_STRING=""
|
||||
BUILD_STRING=""
|
||||
|
||||
# 尝试读取版本号
|
||||
VERSION_STRING=$(grep "#define ${VERSION_MACRO}_VERSION_STRING" "$VERSION_FILE" | sed 's/.*"\(.*\)".*/\1/' | head -1)
|
||||
if [ -z "$VERSION_STRING" ]; then
|
||||
# 尝试另一种格式
|
||||
VERSION_STRING=$(grep "#define ${VERSION_MACRO}_APP_VERSION_STRING" "$VERSION_FILE" | sed 's/.*"\(.*\)".*/\1/' | head -1)
|
||||
fi
|
||||
|
||||
# 尝试读取构建号
|
||||
BUILD_STRING=$(grep "#define ${VERSION_MACRO}_BUILD_STRING" "$VERSION_FILE" | sed 's/.*"\(.*\)".*/\1/' | head -1)
|
||||
if [ -z "$BUILD_STRING" ]; then
|
||||
# 尝试另一种格式
|
||||
BUILD_STRING=$(grep "#define ${VERSION_MACRO}_APP_VERSION_BUILD" "$VERSION_FILE" | sed 's/.*"\(.*\)".*/\1/' | head -1)
|
||||
fi
|
||||
|
||||
# 如果仍然无法读取,使用默认值
|
||||
if [ -z "$VERSION_STRING" ]; then
|
||||
VERSION_STRING="1.0.0"
|
||||
echo "警告: 无法读取版本号,使用默认值: $VERSION_STRING"
|
||||
else
|
||||
echo "版本号: $VERSION_STRING"
|
||||
fi
|
||||
|
||||
if [ -z "$BUILD_STRING" ]; then
|
||||
BUILD_STRING="1"
|
||||
echo "警告: 无法读取构建号,使用默认值: $BUILD_STRING"
|
||||
else
|
||||
echo "构建号: $BUILD_STRING"
|
||||
fi
|
||||
|
||||
# 组合完整版本号
|
||||
FULL_VERSION="${VERSION_STRING}.${BUILD_STRING}"
|
||||
echo "完整版本: $FULL_VERSION"
|
||||
echo "=========================================="
|
||||
|
||||
# 检查应用列表文件是否存在
|
||||
if [ ! -f "$APP_LIST_FILE" ]; then
|
||||
echo "错误: 应用列表文件不存在: $APP_LIST_FILE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 更新应用列表文件中的版本信息
|
||||
# 查找对应行并更新版本号
|
||||
if grep -q "| ${CHINESE_NAME} | ${PUBLISH_NAME} |" "$APP_LIST_FILE"; then
|
||||
# 使用sed更新版本号
|
||||
sed -i "s/| ${CHINESE_NAME} | ${PUBLISH_NAME} | .* |/| ${CHINESE_NAME} | ${PUBLISH_NAME} | ${FULL_VERSION} |/" "$APP_LIST_FILE"
|
||||
echo "已更新 $CHINESE_NAME 的版本信息为 $FULL_VERSION"
|
||||
else
|
||||
echo "警告: 在应用列表中未找到项目 '$CHINESE_NAME' ($PUBLISH_NAME)"
|
||||
fi
|
||||
|
||||
echo "=========================================="
|
||||
echo "版本信息更新完成!"
|
||||
echo "=========================================="
|
||||
Loading…
x
Reference in New Issue
Block a user