diff --git a/App/App.pro b/App/App.pro index 2dc99c0..078bfe4 100644 --- a/App/App.pro +++ b/App/App.pro @@ -1,28 +1,41 @@ TEMPLATE = subdirs -# 拆包项目 -SUBDIRS += ./GrabBag/GrabBag.pro +# 通过 TARGET_APP 变量指定要编译的应用 +# 用法: qmake "TARGET_APP=GrabBag" 或不指定则编译全部 +# 可用值: GrabBag, BeltTearing, LapWeld, Workpiece, ParticleSize, +# BinocularMark, WorkpieceProject, TunnelChannel, WheelMeasure -# 撕裂项目 -SUBDIRS += ./BeltTearing/BeltTearing.pro - -# 焊接 -SUBDIRS += ./LapWeld/LapWeld.pro - -# 工件定位 -SUBDIRS += ./Workpiece/Workpiece.pro - -# 颗粒尺寸检测 -SUBDIRS += ./ParticleSize/ParticleSize.pro - -# 双目Mark检测 -SUBDIRS += ./BinocularMark/BinocularMark.pro - -# 工件项目(WorkpiecePosition和WorkpieceSplice) -SUBDIRS += ./WorkpieceProject/WorkpieceProject.pro - -# 铁路隧道槽道测量 -SUBDIRS += ./TunnelChannel/TunnelChannel.pro - -# 车轮拱高测量 -SUBDIRS += ./WheelMeasure/WheelMeasure.pro +isEmpty(TARGET_APP) { + # 未指定则编译全部 + SUBDIRS += GrabBag/GrabBag.pro # 拆包项目 + SUBDIRS += BeltTearing/BeltTearing.pro # 撕裂项目 + SUBDIRS += LapWeld/LapWeld.pro # 焊接 + SUBDIRS += Workpiece/Workpiece.pro # 工件定位 + SUBDIRS += ParticleSize/ParticleSize.pro # 颗粒尺寸检测 + SUBDIRS += BinocularMark/BinocularMark.pro # 双目Mark检测 + SUBDIRS += WorkpieceProject/WorkpieceProject.pro # 工件项目 + SUBDIRS += TunnelChannel/TunnelChannel.pro # 铁路隧道槽道测量 + SUBDIRS += WheelMeasure/WheelMeasure.pro # 车轮拱高测量 +} else { + equals(TARGET_APP, "GrabBag") { + SUBDIRS += GrabBag/GrabBag.pro + } else:equals(TARGET_APP, "BeltTearing") { + SUBDIRS += BeltTearing/BeltTearing.pro + } else:equals(TARGET_APP, "LapWeld") { + SUBDIRS += LapWeld/LapWeld.pro + } else:equals(TARGET_APP, "Workpiece") { + SUBDIRS += Workpiece/Workpiece.pro + } else:equals(TARGET_APP, "ParticleSize") { + SUBDIRS += ParticleSize/ParticleSize.pro + } else:equals(TARGET_APP, "BinocularMark") { + SUBDIRS += BinocularMark/BinocularMark.pro + } else:equals(TARGET_APP, "WorkpieceProject") { + SUBDIRS += WorkpieceProject/WorkpieceProject.pro + } else:equals(TARGET_APP, "TunnelChannel") { + SUBDIRS += TunnelChannel/TunnelChannel.pro + } else:equals(TARGET_APP, "WheelMeasure") { + SUBDIRS += WheelMeasure/WheelMeasure.pro + } else { + error("无效的 TARGET_APP: $$TARGET_APP") + } +} diff --git a/App/BeltTearing/BeltTearing.pro b/App/BeltTearing/BeltTearing.pro index 4a86a26..a4433dc 100644 --- a/App/BeltTearing/BeltTearing.pro +++ b/App/BeltTearing/BeltTearing.pro @@ -4,9 +4,3 @@ TEMPLATE = subdirs SUBDIRS += BeltTearingConfig/BeltTearingConfig.pro SUBDIRS += BeltTearingApp/BeltTearingApp.pro SUBDIRS += BeltTearingServer/BeltTearingServer.pro - -# 设置编译顺序依赖 -BeltTearingApp.depends += ../../../VrNets/VrTcpClient.pro -BeltTearingApp.depends += BeltTearingConfig/BeltTearingConfig.pro - -BeltTearingServer.depends += BeltTearingConfig/BeltTearingConfig.pro diff --git a/App/BinocularMark/BinocularMark.pro b/App/BinocularMark/BinocularMark.pro index e953ffd..214439a 100644 --- a/App/BinocularMark/BinocularMark.pro +++ b/App/BinocularMark/BinocularMark.pro @@ -1,13 +1,8 @@ TEMPLATE = subdirs -# 拆包项目 +# 双目Mark检测项目 SUBDIRS += BinocularMarkApp/BinocularMarkApp.pro win32 { - SUBDIRS += BinocularMarkTest/BinocularMarkTest.pro - - # 依赖关系 - BinocularMarkTest.depends = BinocularMarkReceiver } - diff --git a/App/GrabBag/GrabBag.pro b/App/GrabBag/GrabBag.pro index a414cf8..667dd5b 100644 --- a/App/GrabBag/GrabBag.pro +++ b/App/GrabBag/GrabBag.pro @@ -1,8 +1,5 @@ TEMPLATE = subdirs + # 拆包项目 SUBDIRS += GrabBagConfig/GrabBagConfig.pro SUBDIRS += GrabBagApp/GrabBagApp.pro -# SUBDIRS += GrabBagConfigCmd - -# 设置编译依赖顺序:GrabBagApp 依赖于 GrabBagConfig -GrabBagApp.depends = GrabBagConfig diff --git a/App/LapWeld/LapWeld.pro b/App/LapWeld/LapWeld.pro index e302077..9e17b59 100644 --- a/App/LapWeld/LapWeld.pro +++ b/App/LapWeld/LapWeld.pro @@ -1,4 +1,5 @@ TEMPLATE = subdirs -# 拆包项目 -SUBDIRS += LapWeldApp/LapWeldApp.pro + +# 焊接项目 SUBDIRS += LapWeldConfig/LapWeldConfig.pro +SUBDIRS += LapWeldApp/LapWeldApp.pro diff --git a/App/ParticleSize/ParticleSize.pro b/App/ParticleSize/ParticleSize.pro index 42e8ea8..6dd0fbf 100644 --- a/App/ParticleSize/ParticleSize.pro +++ b/App/ParticleSize/ParticleSize.pro @@ -1,8 +1,5 @@ TEMPLATE = subdirs -# 子项目 +# 颗粒尺寸检测项目 SUBDIRS += ParticleSizeConfig/ParticleSizeConfig.pro SUBDIRS += ParticleSizeApp/ParticleSizeApp.pro - -# 设置构建依赖顺序:ParticleSizeApp 依赖 ParticleSizeConfig -ParticleSizeApp.depends = ParticleSizeConfig diff --git a/App/ParticleSize/ParticleSizeConfig/Inc/IVrConfig.h b/App/ParticleSize/ParticleSizeConfig/Inc/IVrConfig.h index 8839586..642ff4d 100644 --- a/App/ParticleSize/ParticleSizeConfig/Inc/IVrConfig.h +++ b/App/ParticleSize/ParticleSizeConfig/Inc/IVrConfig.h @@ -54,6 +54,13 @@ struct SizeParam double length = 0.0; // 长度(mm) double width = 0.0; // 宽度(mm) double height = 0.0; // 高度(mm) + + // 默认构造函数 + SizeParam() = default; + + // 带参数的构造函数,支持花括号初始化 + SizeParam(double l, double w, double h) + : length(l), width(w), height(h) {} }; /** diff --git a/App/TunnelChannel/TunnelChannel.pro b/App/TunnelChannel/TunnelChannel.pro index 4d0e642..aee2bd4 100644 --- a/App/TunnelChannel/TunnelChannel.pro +++ b/App/TunnelChannel/TunnelChannel.pro @@ -1,8 +1,5 @@ TEMPLATE = subdirs -# 子项目 +# 铁路隧道槽道测量项目 SUBDIRS += TunnelChannelConfig/TunnelChannelConfig.pro SUBDIRS += TunnelChannelApp/TunnelChannelApp.pro - -# 设置构建依赖顺序:TunnelChannelApp 依赖 TunnelChannelConfig -TunnelChannelApp.depends = TunnelChannelConfig diff --git a/App/WheelMeasure/WheelMeasure.pro b/App/WheelMeasure/WheelMeasure.pro index 0fddde1..975ad6c 100644 --- a/App/WheelMeasure/WheelMeasure.pro +++ b/App/WheelMeasure/WheelMeasure.pro @@ -3,6 +3,3 @@ TEMPLATE = subdirs # 车轮拱高测量项目 SUBDIRS += WheelMeasureConfig/WheelMeasureConfig.pro SUBDIRS += WheelMeasureApp/WheelMeasureApp.pro - -# 设置编译顺序依赖 -WheelMeasureApp.depends += WheelMeasureConfig diff --git a/App/Workpiece/Workpiece.pro b/App/Workpiece/Workpiece.pro index 0488a9e..dc99019 100644 --- a/App/Workpiece/Workpiece.pro +++ b/App/Workpiece/Workpiece.pro @@ -1,8 +1,5 @@ TEMPLATE = subdirs -# 子项目 +# 工件定位项目 SUBDIRS += WorkpieceConfig/WorkpieceConfig.pro SUBDIRS += WorkpieceApp/WorkpieceApp.pro - -# 设置构建依赖顺序:WorkpieceApp 依赖 WorkpieceConfig -WorkpieceApp.depends = WorkpieceConfig diff --git a/App/WorkpieceProject/WorkpiecePositionApp/WorkpiecePositionApp.pro b/App/WorkpieceProject/WorkpiecePositionApp/WorkpiecePositionApp.pro index 54fb198..bc975b4 100644 --- a/App/WorkpieceProject/WorkpiecePositionApp/WorkpiecePositionApp.pro +++ b/App/WorkpieceProject/WorkpiecePositionApp/WorkpiecePositionApp.pro @@ -74,16 +74,18 @@ win32:CONFIG(debug, debug|release) { LIBS += -L../WorkpieceProjectConfig -lWorkpieceProjectConfig LIBS += -L../../../Module/BinocularMarkReceiver -lBinocularMarkReceiver LIBS += -L../../../Device/EpicEyeDevice -lEpicEyeDevice - LIBS += -L../../../Device/VrEyeDevice -lVrEyeDevice LIBS += -L../../../AppUtils/AppCommon -lAppCommon LIBS += -L../../../AppUtils/UICommon -lUICommon LIBS += -L../../../AppUtils/CloudUtils -lCloudUtils - LIBS += -L../../../VrUtils -lVrUtils - # AppCommon 依赖 + # AppCommon 依赖(VrEyeDevice 必须在 AppCommon 之后) + LIBS += -L../../../Device/VrEyeDevice -lVrEyeDevice LIBS += -L../../../Module/ModbusTCPServer -lModbusTCPServer LIBS += -L../../../Module/ShareMem -lShareMem LIBS += -L../../../VrNets -lVrModbus LIBS += -L../../../VrNets -lVrTCPServer + # BinocularMarkReceiver 依赖 + LIBS += -L../../../VrNets -lVrTcpClient + LIBS += -L../../../VrUtils -lVrUtils LIBS += -lpthread -lrt } diff --git a/App/WorkpieceProject/WorkpieceProject.pro b/App/WorkpieceProject/WorkpieceProject.pro index d47e514..2357716 100644 --- a/App/WorkpieceProject/WorkpieceProject.pro +++ b/App/WorkpieceProject/WorkpieceProject.pro @@ -3,14 +3,7 @@ TEMPLATE = subdirs -# 子项目列表 SUBDIRS += \ - WorkpieceProjectConfig \ - WorkpiecePositionApp \ - WorkpieceSpliceApp - -# 设置子项目内部依赖关系 -# 公共依赖(BinocularMarkReceiver, VrEyeDevice, AppCommon, UICommon, CloudUtils, VrUtils) -# 已在 App.pro 中统一配置 -WorkpiecePositionApp.depends = WorkpieceProjectConfig -WorkpieceSpliceApp.depends = WorkpieceProjectConfig + WorkpieceProjectConfig/WorkpieceProjectConfig.pro \ + WorkpiecePositionApp/WorkpiecePositionApp.pro \ + WorkpieceSpliceApp/WorkpieceSpliceApp.pro diff --git a/App/WorkpieceProject/WorkpieceSpliceApp/WorkpieceSpliceApp.pro b/App/WorkpieceProject/WorkpieceSpliceApp/WorkpieceSpliceApp.pro index 724c6c8..442835b 100644 --- a/App/WorkpieceProject/WorkpieceSpliceApp/WorkpieceSpliceApp.pro +++ b/App/WorkpieceProject/WorkpieceSpliceApp/WorkpieceSpliceApp.pro @@ -66,16 +66,18 @@ win32:CONFIG(debug, debug|release) { }else:unix:!macx { LIBS += -L../WorkpieceProjectConfig -lWorkpieceProjectConfig LIBS += -L../../../Module/BinocularMarkReceiver -lBinocularMarkReceiver - LIBS += -L../../../Device/VrEyeDevice -lVrEyeDevice LIBS += -L../../../AppUtils/UICommon -lUICommon LIBS += -L../../../AppUtils/AppCommon -lAppCommon LIBS += -L../../../AppUtils/CloudUtils -lCloudUtils - LIBS += -L../../../VrUtils -lVrUtils - # AppCommon 依赖 + # AppCommon 依赖(VrEyeDevice 必须在 AppCommon 之后) + LIBS += -L../../../Device/VrEyeDevice -lVrEyeDevice LIBS += -L../../../Module/ModbusTCPServer -lModbusTCPServer LIBS += -L../../../Module/ShareMem -lShareMem LIBS += -L../../../VrNets -lVrModbus LIBS += -L../../../VrNets -lVrTCPServer + # BinocularMarkReceiver 依赖 + LIBS += -L../../../VrNets -lVrTcpClient + LIBS += -L../../../VrUtils -lVrUtils LIBS += -lpthread -lrt } diff --git a/AppUtils/AppUtils.pro b/AppUtils/AppUtils.pro index 5896a71..16cd782 100644 --- a/AppUtils/AppUtils.pro +++ b/AppUtils/AppUtils.pro @@ -1,10 +1,5 @@ TEMPLATE = subdirs -SUBDIRS += ../AppUtils/UICommon/UICommon.pro -SUBDIRS += ../AppUtils/CloudUtils/CloudUtils.pro -SUBDIRS += ../AppUtils/AppCommon/AppCommon.pro - -# 设置构建依赖顺序 -# AppCommon 依赖 CloudUtils(因为使用了 LaserDataLoader) -AppCommon.depends = CloudUtils - +SUBDIRS += UICommon/UICommon.pro +SUBDIRS += CloudUtils/CloudUtils.pro +SUBDIRS += AppCommon/AppCommon.pro diff --git a/Device/Device.pro b/Device/Device.pro index d585198..087ee61 100644 --- a/Device/Device.pro +++ b/Device/Device.pro @@ -6,13 +6,8 @@ TEMPLATE = subdirs # SDK(需要先编译) SUBDIRS += ../SDK/Device/EpicEye/EpicEyeSDK.pro - -# 子项目列表 SUBDIRS += \ - VrEyeDevice \ - EpicEyeDevice \ - GalaxyDevice \ - HikDevice - -# 项目依赖关系(EpicEyeSDK 在 GrabBagPrj.pro 中单独编译) -# EpicEyeDevice.depends = EpicEyeSDK + VrEyeDevice/VrEyeDevice.pro \ + EpicEyeDevice/EpicEyeDevice.pro \ + GalaxyDevice/GalaxyDevice.pro \ + HikDevice/HikDevice.pro diff --git a/GrabBagPrj/GrabBagPrj.pro b/GrabBagPrj/GrabBagPrj.pro index 1e7ab12..f9b10eb 100644 --- a/GrabBagPrj/GrabBagPrj.pro +++ b/GrabBagPrj/GrabBagPrj.pro @@ -1,24 +1,16 @@ TEMPLATE = subdirs +win32-msvc { + CONFIG += ordered +} + SUBDIRS += ../VrCommon/VrCommon.pro SUBDIRS += ../VrUtils/VrUtils.pro - +SUBDIRS += ../VrNets/VrNets.pro SUBDIRS += ../Module/Module.pro SUBDIRS += ../Device/Device.pro -SUBDIRS += ../VrNets/VrNets.pro - SUBDIRS += ../AppUtils/AppUtils.pro - SUBDIRS += ../App/App.pro # Test 测试 # SUBDIRS += ../Test/Test.pro - -# 设置构建依赖顺序 -VrUtils.depends = VrCommon -Module.depends = VrCommon VrUtils -Device.depends = VrCommon VrUtils EpicEyeSDK -VrNets.depends = VrCommon VrUtils -AppUtils.depends = VrCommon VrUtils -App.depends = VrCommon VrUtils Device Module AppUtils VrNets - diff --git a/GrabBagPrj/buildArmPrj.sh b/GrabBagPrj/buildArmPrj.sh index 4321ed1..0f2182e 100644 --- a/GrabBagPrj/buildArmPrj.sh +++ b/GrabBagPrj/buildArmPrj.sh @@ -1,40 +1,159 @@ #!/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 [ "$1" = "-r" ]; then +# 清理编译目录 +if [ "$CLEAN_BUILD" = true ]; then + echo "清理编译目录..." rm -rf buildarm + FORCE_QMAKE=true fi mkdir -p buildarm/GrabBagPrj cd buildarm/GrabBagPrj -qmake -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++" \ - ../../GrabBagPrj.pro -make -j6 +# 交叉编译配置 +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 [ $? -eq 0 ]; then - END_TIME=$(date +%s) - ELAPSED=$((END_TIME - START_TIME)) - MINUTES=$((ELAPSED / 60)) - SECONDS=$((ELAPSED % 60)) +# 如果指定了 App,添加 TARGET_APP 参数 +if [ -n "$TARGET_APP" ]; then + QMAKE_ARGS+=("TARGET_APP=$TARGET_APP") echo "==========================================" - echo "编译成功!耗时: ${MINUTES}分${SECONDS}秒" + echo "编译指定 App: $TARGET_APP" echo "==========================================" else - END_TIME=$(date +%s) - ELAPSED=$((END_TIME - START_TIME)) - MINUTES=$((ELAPSED / 60)) - SECONDS=$((ELAPSED % 60)) echo "==========================================" - echo "编译失败!耗时: ${MINUTES}分${SECONDS}秒" + 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 diff --git a/Module/Module.pro b/Module/Module.pro index 852d2a9..608e12f 100644 --- a/Module/Module.pro +++ b/Module/Module.pro @@ -3,12 +3,7 @@ TEMPLATE = subdirs -# 子项目列表 SUBDIRS += \ - ShareMem \ - BinocularMarkReceiver \ - ModbusTCPServer - -# 项目依赖关系 -# BinocularMarkReceiver 依赖 VrUtils(用于网络通信) -# ModbusTCPServer 和 ModbusTCPClient 依赖 VrModbus + ShareMem/ShareMem.pro \ + BinocularMarkReceiver/BinocularMarkReceiver.pro \ + ModbusTCPServer/ModbusTCPServer.pro diff --git a/VrNets/VrNets.pro b/VrNets/VrNets.pro index 080fb76..9ca3215 100644 --- a/VrNets/VrNets.pro +++ b/VrNets/VrNets.pro @@ -1,6 +1,6 @@ - TEMPLATE = subdirs -SUBDIRS += VrModbus.pro \ - VrTcpClient.pro \ - VrTcpServer.pro +SUBDIRS += \ + VrModbus.pro \ + VrTcpClient.pro \ + VrTcpServer.pro