#!/bin/bash base_path=$(pwd) if [[ $base_path =~ ^/mnt/ ]]; then build_path=/tmp/build else build_path=${base_path}/build fi echo "build path: $build_path" qt_prefix_path="/opt/Qt/6.8.0/gcc_64" debug_deploy=false if [ -d ${qt_prefix_path} ]; then # 先找Qt6 cmake_qt_parameters="-DCMAKE_PREFIX_PATH=${qt_prefix_path} \ -DQT_QMAKE_EXECUTABLE=${qt_prefix_path}/bin/qmake \ -DQT_DIR=${qt_prefix_path}/lib/cmake/Qt6 \ -DQt6_DIR=${qt_prefix_path}/lib/cmake/Qt6 \ -DQt6Core_DIR=${qt_prefix_path}/lib/cmake/Qt6Core \ -DQt6Gui_DIR=${qt_prefix_path}/lib/cmake/Qt6Gui \ -DQt6Qml_DIR=${qt_prefix_path}/lib/cmake/Qt6Qml \ -DQt6Widgets_DIR=${qt_prefix_path}/lib/cmake/Qt6Widgets \ -DQt6Quick_DIR=${qt_prefix_path}/lib/cmake/Qt6Quick \ -DQt6Svg_DIR=${qt_prefix_path}/lib/cmake/Qt6Svg " elif [ -d "/opt/Qt/5.15.2/gcc_64" ]; then qt_prefix_path="/opt/Qt/5.15.2/gcc_64" cmake_qt_parameters="-DCMAKE_PREFIX_PATH=${qt_prefix_path} \ -DQT_QMAKE_EXECUTABLE=${qt_prefix_path}/bin/qmake \ -DQT_DIR=${qt_prefix_path}/lib/cmake/Qt5 \ -DQt5_DIR=${qt_prefix_path}/lib/cmake/Qt5 \ -DQt5Core_DIR=${qt_prefix_path}/lib/cmake/Qt5Core \ -DQt5Gui_DIR=${qt_prefix_path}/lib/cmake/Qt5Gui \ -DQt5Qml_DIR=${qt_prefix_path}/lib/cmake/Qt5Qml \ -DQt5Widgets_DIR=${qt_prefix_path}/lib/cmake/Qt5Widgets \ -DQt5Quick_DIR=${qt_prefix_path}/lib/cmake/Qt5Quick \ -DQt5Svg_DIR=${qt_prefix_path}/lib/cmake/Qt5Svg " else cmake_qt_parameters="" echo "please install qt6.8.0 or qt5.15.2 ..." fi function cmake_scan() { if [ ! -d ${build_path} ]; then mkdir ${build_path} fi if [ $debug_deploy = true ]; then build_mode=-DCMAKE_BUILD_TYPE=Debug echo "build application in debug mode." else build_mode=-DCMAKE_BUILD_TYPE=Release echo "build application in release mode." fi cmake \ -G Ninja \ -S ${base_path} \ -B ${build_path} \ ${cmake_qt_parameters} \ $build_mode } function build() { if [ ! -f "${build_path}/CMakeCache.txt" ]; then cmake_scan fi if [ $? -ne 0 ]; then exit 1 fi cmake \ --build ${build_path} \ --target all if [ $? -ne 0 ]; then exit 1 fi } function clean(){ rm -fr ${build_path} } function deploy() { if [ -d ${build_path}/lib ]; then rm -fr ${build_path}/lib fi mkdir ${build_path}/lib ldd ${build_path}/Analyser/Analyser.AppImage | grep "=> /" | awk '{print $3}' | xargs -I '{}' cp -v '{}' ${build_path}/lib ldd ${build_path}/Analyser/Analyser.AppImage | grep "ld-linux" | awk '{print $1}' | xargs -I '{}' cp -v '{}' ${build_path}/lib # ldd ${build_path}/OtaUpdate/SmartLockerUpdater | grep "=> /" | awk '{print $3}' | xargs -I '{}' cp -v '{}' ${build_path}/lib # ldd ${build_path}/OtaUpdate/SmartLockerUpdater | grep "ld-linux" | awk '{print $1}' | xargs -I '{}' cp -v '{}' ${build_path}/lib rm ${build_path}/lib/ld-linux-x86-64.so.2 rm ${build_path}/lib/libc.so.6 rm ${build_path}/lib/libm.so.6 rm ${build_path}/lib/libstdc++.so.6 cd build cpack cd .. } function change_log() { commit_message=$(git log -1 --pretty=format:"%B") echo "Latest commit message:" echo "$commit_message" echo "$commit_message" >${build_path}/CHANGELOG.txt echo "Commit message has been written to ${build_path}/CHANGELOG.txt" } function main() { local cmd=$1 shift 1 case $cmd in build) build ;; scan) cmake_scan ;; clean) clean ;; deploy) deploy ;; changelog) change_log ;; *) build ;; esac } main $@