调优pro编译,进行快速编译

This commit is contained in:
yiyi 2026-01-03 22:28:04 +08:00
parent 5dda95edb9
commit 4d9f7170ee
19 changed files with 226 additions and 138 deletions

View File

@ -1,28 +1,41 @@
TEMPLATE = subdirs TEMPLATE = subdirs
# 拆包项目 # 通过 TARGET_APP 变量指定要编译的应用
SUBDIRS += ./GrabBag/GrabBag.pro # 用法: qmake "TARGET_APP=GrabBag" 或不指定则编译全部
# 可用值: GrabBag, BeltTearing, LapWeld, Workpiece, ParticleSize,
# BinocularMark, WorkpieceProject, TunnelChannel, WheelMeasure
# 撕裂项目 isEmpty(TARGET_APP) {
SUBDIRS += ./BeltTearing/BeltTearing.pro # 未指定则编译全部
SUBDIRS += GrabBag/GrabBag.pro # 拆包项目
# 焊接 SUBDIRS += BeltTearing/BeltTearing.pro # 撕裂项目
SUBDIRS += ./LapWeld/LapWeld.pro SUBDIRS += LapWeld/LapWeld.pro # 焊接
SUBDIRS += Workpiece/Workpiece.pro # 工件定位
# 工件定位 SUBDIRS += ParticleSize/ParticleSize.pro # 颗粒尺寸检测
SUBDIRS += ./Workpiece/Workpiece.pro SUBDIRS += BinocularMark/BinocularMark.pro # 双目Mark检测
SUBDIRS += WorkpieceProject/WorkpieceProject.pro # 工件项目
# 颗粒尺寸检测 SUBDIRS += TunnelChannel/TunnelChannel.pro # 铁路隧道槽道测量
SUBDIRS += ./ParticleSize/ParticleSize.pro SUBDIRS += WheelMeasure/WheelMeasure.pro # 车轮拱高测量
} else {
# 双目Mark检测 equals(TARGET_APP, "GrabBag") {
SUBDIRS += ./BinocularMark/BinocularMark.pro SUBDIRS += GrabBag/GrabBag.pro
} else:equals(TARGET_APP, "BeltTearing") {
# 工件项目WorkpiecePosition和WorkpieceSplice SUBDIRS += BeltTearing/BeltTearing.pro
SUBDIRS += ./WorkpieceProject/WorkpieceProject.pro } else:equals(TARGET_APP, "LapWeld") {
SUBDIRS += LapWeld/LapWeld.pro
# 铁路隧道槽道测量 } else:equals(TARGET_APP, "Workpiece") {
SUBDIRS += ./TunnelChannel/TunnelChannel.pro SUBDIRS += Workpiece/Workpiece.pro
} else:equals(TARGET_APP, "ParticleSize") {
# 车轮拱高测量 SUBDIRS += ParticleSize/ParticleSize.pro
SUBDIRS += ./WheelMeasure/WheelMeasure.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")
}
}

View File

@ -4,9 +4,3 @@ TEMPLATE = subdirs
SUBDIRS += BeltTearingConfig/BeltTearingConfig.pro SUBDIRS += BeltTearingConfig/BeltTearingConfig.pro
SUBDIRS += BeltTearingApp/BeltTearingApp.pro SUBDIRS += BeltTearingApp/BeltTearingApp.pro
SUBDIRS += BeltTearingServer/BeltTearingServer.pro SUBDIRS += BeltTearingServer/BeltTearingServer.pro
# 设置编译顺序依赖
BeltTearingApp.depends += ../../../VrNets/VrTcpClient.pro
BeltTearingApp.depends += BeltTearingConfig/BeltTearingConfig.pro
BeltTearingServer.depends += BeltTearingConfig/BeltTearingConfig.pro

View File

@ -1,13 +1,8 @@
TEMPLATE = subdirs TEMPLATE = subdirs
# 拆包项目 # 双目Mark检测项目
SUBDIRS += BinocularMarkApp/BinocularMarkApp.pro SUBDIRS += BinocularMarkApp/BinocularMarkApp.pro
win32 { win32 {
SUBDIRS += BinocularMarkTest/BinocularMarkTest.pro SUBDIRS += BinocularMarkTest/BinocularMarkTest.pro
# 依赖关系
BinocularMarkTest.depends = BinocularMarkReceiver
} }

View File

@ -1,8 +1,5 @@
TEMPLATE = subdirs TEMPLATE = subdirs
# 拆包项目 # 拆包项目
SUBDIRS += GrabBagConfig/GrabBagConfig.pro SUBDIRS += GrabBagConfig/GrabBagConfig.pro
SUBDIRS += GrabBagApp/GrabBagApp.pro SUBDIRS += GrabBagApp/GrabBagApp.pro
# SUBDIRS += GrabBagConfigCmd
# 设置编译依赖顺序GrabBagApp 依赖于 GrabBagConfig
GrabBagApp.depends = GrabBagConfig

View File

@ -1,4 +1,5 @@
TEMPLATE = subdirs TEMPLATE = subdirs
# 拆包项目
SUBDIRS += LapWeldApp/LapWeldApp.pro # 焊接项目
SUBDIRS += LapWeldConfig/LapWeldConfig.pro SUBDIRS += LapWeldConfig/LapWeldConfig.pro
SUBDIRS += LapWeldApp/LapWeldApp.pro

View File

@ -1,8 +1,5 @@
TEMPLATE = subdirs TEMPLATE = subdirs
# 项目 # 颗粒尺寸检测项目
SUBDIRS += ParticleSizeConfig/ParticleSizeConfig.pro SUBDIRS += ParticleSizeConfig/ParticleSizeConfig.pro
SUBDIRS += ParticleSizeApp/ParticleSizeApp.pro SUBDIRS += ParticleSizeApp/ParticleSizeApp.pro
# 设置构建依赖顺序ParticleSizeApp 依赖 ParticleSizeConfig
ParticleSizeApp.depends = ParticleSizeConfig

View File

@ -54,6 +54,13 @@ struct SizeParam
double length = 0.0; // 长度(mm) double length = 0.0; // 长度(mm)
double width = 0.0; // 宽度(mm) double width = 0.0; // 宽度(mm)
double height = 0.0; // 高度(mm) double height = 0.0; // 高度(mm)
// 默认构造函数
SizeParam() = default;
// 带参数的构造函数,支持花括号初始化
SizeParam(double l, double w, double h)
: length(l), width(w), height(h) {}
}; };
/** /**

View File

@ -1,8 +1,5 @@
TEMPLATE = subdirs TEMPLATE = subdirs
# 项目 # 铁路隧道槽道测量项目
SUBDIRS += TunnelChannelConfig/TunnelChannelConfig.pro SUBDIRS += TunnelChannelConfig/TunnelChannelConfig.pro
SUBDIRS += TunnelChannelApp/TunnelChannelApp.pro SUBDIRS += TunnelChannelApp/TunnelChannelApp.pro
# 设置构建依赖顺序TunnelChannelApp 依赖 TunnelChannelConfig
TunnelChannelApp.depends = TunnelChannelConfig

View File

@ -3,6 +3,3 @@ TEMPLATE = subdirs
# 车轮拱高测量项目 # 车轮拱高测量项目
SUBDIRS += WheelMeasureConfig/WheelMeasureConfig.pro SUBDIRS += WheelMeasureConfig/WheelMeasureConfig.pro
SUBDIRS += WheelMeasureApp/WheelMeasureApp.pro SUBDIRS += WheelMeasureApp/WheelMeasureApp.pro
# 设置编译顺序依赖
WheelMeasureApp.depends += WheelMeasureConfig

View File

@ -1,8 +1,5 @@
TEMPLATE = subdirs TEMPLATE = subdirs
# 项目 # 工件定位项目
SUBDIRS += WorkpieceConfig/WorkpieceConfig.pro SUBDIRS += WorkpieceConfig/WorkpieceConfig.pro
SUBDIRS += WorkpieceApp/WorkpieceApp.pro SUBDIRS += WorkpieceApp/WorkpieceApp.pro
# 设置构建依赖顺序WorkpieceApp 依赖 WorkpieceConfig
WorkpieceApp.depends = WorkpieceConfig

View File

@ -74,16 +74,18 @@ win32:CONFIG(debug, debug|release) {
LIBS += -L../WorkpieceProjectConfig -lWorkpieceProjectConfig LIBS += -L../WorkpieceProjectConfig -lWorkpieceProjectConfig
LIBS += -L../../../Module/BinocularMarkReceiver -lBinocularMarkReceiver LIBS += -L../../../Module/BinocularMarkReceiver -lBinocularMarkReceiver
LIBS += -L../../../Device/EpicEyeDevice -lEpicEyeDevice LIBS += -L../../../Device/EpicEyeDevice -lEpicEyeDevice
LIBS += -L../../../Device/VrEyeDevice -lVrEyeDevice
LIBS += -L../../../AppUtils/AppCommon -lAppCommon LIBS += -L../../../AppUtils/AppCommon -lAppCommon
LIBS += -L../../../AppUtils/UICommon -lUICommon LIBS += -L../../../AppUtils/UICommon -lUICommon
LIBS += -L../../../AppUtils/CloudUtils -lCloudUtils LIBS += -L../../../AppUtils/CloudUtils -lCloudUtils
LIBS += -L../../../VrUtils -lVrUtils # AppCommon 依赖VrEyeDevice 必须在 AppCommon 之后)
# AppCommon 依赖 LIBS += -L../../../Device/VrEyeDevice -lVrEyeDevice
LIBS += -L../../../Module/ModbusTCPServer -lModbusTCPServer LIBS += -L../../../Module/ModbusTCPServer -lModbusTCPServer
LIBS += -L../../../Module/ShareMem -lShareMem LIBS += -L../../../Module/ShareMem -lShareMem
LIBS += -L../../../VrNets -lVrModbus LIBS += -L../../../VrNets -lVrModbus
LIBS += -L../../../VrNets -lVrTCPServer LIBS += -L../../../VrNets -lVrTCPServer
# BinocularMarkReceiver 依赖
LIBS += -L../../../VrNets -lVrTcpClient
LIBS += -L../../../VrUtils -lVrUtils
LIBS += -lpthread -lrt LIBS += -lpthread -lrt
} }

View File

@ -3,14 +3,7 @@
TEMPLATE = subdirs TEMPLATE = subdirs
# 子项目列表
SUBDIRS += \ SUBDIRS += \
WorkpieceProjectConfig \ WorkpieceProjectConfig/WorkpieceProjectConfig.pro \
WorkpiecePositionApp \ WorkpiecePositionApp/WorkpiecePositionApp.pro \
WorkpieceSpliceApp WorkpieceSpliceApp/WorkpieceSpliceApp.pro
# 设置子项目内部依赖关系
# 公共依赖BinocularMarkReceiver, VrEyeDevice, AppCommon, UICommon, CloudUtils, VrUtils
# 已在 App.pro 中统一配置
WorkpiecePositionApp.depends = WorkpieceProjectConfig
WorkpieceSpliceApp.depends = WorkpieceProjectConfig

View File

@ -66,16 +66,18 @@ win32:CONFIG(debug, debug|release) {
}else:unix:!macx { }else:unix:!macx {
LIBS += -L../WorkpieceProjectConfig -lWorkpieceProjectConfig LIBS += -L../WorkpieceProjectConfig -lWorkpieceProjectConfig
LIBS += -L../../../Module/BinocularMarkReceiver -lBinocularMarkReceiver LIBS += -L../../../Module/BinocularMarkReceiver -lBinocularMarkReceiver
LIBS += -L../../../Device/VrEyeDevice -lVrEyeDevice
LIBS += -L../../../AppUtils/UICommon -lUICommon LIBS += -L../../../AppUtils/UICommon -lUICommon
LIBS += -L../../../AppUtils/AppCommon -lAppCommon LIBS += -L../../../AppUtils/AppCommon -lAppCommon
LIBS += -L../../../AppUtils/CloudUtils -lCloudUtils LIBS += -L../../../AppUtils/CloudUtils -lCloudUtils
LIBS += -L../../../VrUtils -lVrUtils # AppCommon 依赖VrEyeDevice 必须在 AppCommon 之后)
# AppCommon 依赖 LIBS += -L../../../Device/VrEyeDevice -lVrEyeDevice
LIBS += -L../../../Module/ModbusTCPServer -lModbusTCPServer LIBS += -L../../../Module/ModbusTCPServer -lModbusTCPServer
LIBS += -L../../../Module/ShareMem -lShareMem LIBS += -L../../../Module/ShareMem -lShareMem
LIBS += -L../../../VrNets -lVrModbus LIBS += -L../../../VrNets -lVrModbus
LIBS += -L../../../VrNets -lVrTCPServer LIBS += -L../../../VrNets -lVrTCPServer
# BinocularMarkReceiver 依赖
LIBS += -L../../../VrNets -lVrTcpClient
LIBS += -L../../../VrUtils -lVrUtils
LIBS += -lpthread -lrt LIBS += -lpthread -lrt
} }

View File

@ -1,10 +1,5 @@
TEMPLATE = subdirs TEMPLATE = subdirs
SUBDIRS += ../AppUtils/UICommon/UICommon.pro SUBDIRS += UICommon/UICommon.pro
SUBDIRS += ../AppUtils/CloudUtils/CloudUtils.pro SUBDIRS += CloudUtils/CloudUtils.pro
SUBDIRS += ../AppUtils/AppCommon/AppCommon.pro SUBDIRS += AppCommon/AppCommon.pro
# 设置构建依赖顺序
# AppCommon 依赖 CloudUtils(因为使用了 LaserDataLoader
AppCommon.depends = CloudUtils

View File

@ -6,13 +6,8 @@ TEMPLATE = subdirs
# SDK(需要先编译) # SDK(需要先编译)
SUBDIRS += ../SDK/Device/EpicEye/EpicEyeSDK.pro SUBDIRS += ../SDK/Device/EpicEye/EpicEyeSDK.pro
# 子项目列表
SUBDIRS += \ SUBDIRS += \
VrEyeDevice \ VrEyeDevice/VrEyeDevice.pro \
EpicEyeDevice \ EpicEyeDevice/EpicEyeDevice.pro \
GalaxyDevice \ GalaxyDevice/GalaxyDevice.pro \
HikDevice HikDevice/HikDevice.pro
# 项目依赖关系EpicEyeSDK GrabBagPrj.pro 中单独编译)
# EpicEyeDevice.depends = EpicEyeSDK

View File

@ -1,24 +1,16 @@
TEMPLATE = subdirs TEMPLATE = subdirs
win32-msvc {
CONFIG += ordered
}
SUBDIRS += ../VrCommon/VrCommon.pro SUBDIRS += ../VrCommon/VrCommon.pro
SUBDIRS += ../VrUtils/VrUtils.pro SUBDIRS += ../VrUtils/VrUtils.pro
SUBDIRS += ../VrNets/VrNets.pro
SUBDIRS += ../Module/Module.pro SUBDIRS += ../Module/Module.pro
SUBDIRS += ../Device/Device.pro SUBDIRS += ../Device/Device.pro
SUBDIRS += ../VrNets/VrNets.pro
SUBDIRS += ../AppUtils/AppUtils.pro SUBDIRS += ../AppUtils/AppUtils.pro
SUBDIRS += ../App/App.pro SUBDIRS += ../App/App.pro
# Test 测试 # Test 测试
# SUBDIRS += ../Test/Test.pro # 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

View File

@ -1,40 +1,159 @@
#!/bin/bash #!/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) START_TIME=$(date +%s)
if [ "$1" = "-r" ]; then # 清理编译目录
if [ "$CLEAN_BUILD" = true ]; then
echo "清理编译目录..."
rm -rf buildarm rm -rf buildarm
FORCE_QMAKE=true
fi fi
mkdir -p buildarm/GrabBagPrj mkdir -p buildarm/GrabBagPrj
cd 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 # 如果指定了 App添加 TARGET_APP 参数
END_TIME=$(date +%s) if [ -n "$TARGET_APP" ]; then
ELAPSED=$((END_TIME - START_TIME)) QMAKE_ARGS+=("TARGET_APP=$TARGET_APP")
MINUTES=$((ELAPSED / 60))
SECONDS=$((ELAPSED % 60))
echo "==========================================" echo "=========================================="
echo "编译成功!耗时: ${MINUTES}${SECONDS}" echo "编译指定 App: $TARGET_APP"
echo "==========================================" echo "=========================================="
else else
END_TIME=$(date +%s)
ELAPSED=$((END_TIME - START_TIME))
MINUTES=$((ELAPSED / 60))
SECONDS=$((ELAPSED % 60))
echo "==========================================" 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 "==========================================" echo "=========================================="
exit 1 exit 1
fi fi

View File

@ -3,12 +3,7 @@
TEMPLATE = subdirs TEMPLATE = subdirs
# 子项目列表
SUBDIRS += \ SUBDIRS += \
ShareMem \ ShareMem/ShareMem.pro \
BinocularMarkReceiver \ BinocularMarkReceiver/BinocularMarkReceiver.pro \
ModbusTCPServer ModbusTCPServer/ModbusTCPServer.pro
# 项目依赖关系
# BinocularMarkReceiver 依赖 VrUtils(用于网络通信)
# ModbusTCPServer ModbusTCPClient 依赖 VrModbus

View File

@ -1,6 +1,6 @@
TEMPLATE = subdirs TEMPLATE = subdirs
SUBDIRS += VrModbus.pro \ SUBDIRS += \
VrTcpClient.pro \ VrModbus.pro \
VrTcpServer.pro VrTcpClient.pro \
VrTcpServer.pro