• 脚本的软件版本管理


    在公司的嵌入式项目中,需要程序在显示软件版本的前提下完成项目构建号自增的功能,每次构建Release版本程序时,构建号自动增加1,公司的标准为,软件版本V1.1.0.132(V X.Y.Z.B),X为大的功能变动或者软件结构重新设计构建时发生变动,Y为新增功能或者重大功能更改时的发布,Z为bug修复发布的小版本,B即为每次构建号,每次构建Release版本时构建号自动加一(而发布Debug版本时不用加一),而且还要考虑到跨平台的情况(当项目在ARM平台下开发编译时考虑构建号自增,在X86平台下不自增)。

    【开发环境】

    软件的开发环境为QtCreator+Linux(或者Window模拟),因此开发过程中需要考虑区分平台。

    【设计策略】
    在不同的平台下或不同的构建配置下,【项目】-【构建设置】-【构建步骤】-【qmake详细配置】,根据平台和配置分别编辑【额外的参数】
       ARM+Release: CONFIG+=ARM CONFIG+=release CONFIG-=debug
       ARM+Debug: CONFIG+=ARM CONFIG-=release CONDIG+=debug
       X86+Release: CONFIG+=release CONFIG-=debug
       X86+Debug: CONFIG-=release CONFIG+=debug
       注意:CONFIG和+=之间不能有空格。
     
    【qmake】
    QtCreator的编译步骤分为qmake+make,其他的可以自定义构建步骤,自己通过脚本定义构建行为,器中qmake主要的责任是生成.pro文件并根据项目结构产生MakeFile作为下一步make的基础,因为make永远是项目构建的核心(当然qmake也是必不可少的,除非你有时间和精力自己编写MakeFile!)这里要特别指出的重要一点:.pro文件也是个灵活的文件,可以加进去很多东西。
     
    【.pro文件的配置】
    contains(CONFIG,ARM){
        contains(CONFIG,release){
    		message("******ARM+release*****");
        
    		updateBuildNumber.target=buildnumber
    		updateBuildNumber.depends=FORCE
    		updateBuildNumber.commands=$$PWD/script/updatebuildnumber.sh $$PWD
        
    		updateVersion.target=version.h
    		updateVersion.depends=buildnumber
    		updateVersion.commands=$$PWD/script/updateversion.sh $$PWD
        
    		PRE_TARGETDEPS += buildnumber version.h
    		QMAKE_EXTRA_TARGET += updateBuildNumber updateVersion 
    	}
    	else{
    		message("******ARM+debug******");
    	}
    }
    else{
        contains(CONFIG,release){
    		message("******X86+release******")
    	}
    	else{
    		message("*******X86+debug******")
    	}
    }
    

     

    【Wondows平台的配置】

    Windows采用简单的处理,直接编辑BAT批量管理脚本,在【项目】-【构建设置】-【构建步骤】中新增构建自定义步骤,commands为该BAT脚本。

    @echo off
    
    set dir=%~d0
    
    set /p buildnumber=<%dir%buildnumber
    set /a buildnumbernew=buildnumber+1
    
    echo buildnumbernew > %dir%buildnumber
    
    echo #ifndef _VERSION_H_ > version.h
    echo #define _VERSION_H_ >> version.h
    echo.  >> version.h
    echo #define VERSION_MAJOR_NUMBER  1 >> version.h
    echo #define VERSION_MEDIUM_NUMBER 0 >> version.h
    echo #define VERSION_MINOR_NUMBER 0 >> version.h
    echo #define VERSION_BUILD_NUMBER %buildnumbernew% >> version.h
    echo.  >> version.h
    echo #endif //_VERSION_H_ >> version.h

     

    【Linux平台的配置】

    updatebuildnumber.sh

    #!/bin/bash
    
    cd $1    #$1为脚本的第一个命令参数
    echo `pwd`
    
    if [! -r buildnumber ]; then   #读取失败
        rm buildnumber
        echo 0 > buildnumber
    else
        cp buildnumber .buildnumberback
        buildnumber=$(cat .buildnumberback)
        let buildnumber=buildnumber+1
        echo $buildnumber
        echo $buildnumber > buildnumber
    fi
    
    #cd ..
    #buildnumber=$(cat buildnumber)
    #
    #if(($buildnumber < 10000)); then
    #    let buildnumber=buildnumber+1
    #    echo buildnumber > buildnumber
    #fi
    

    updateversion.sh

    #!/bin/bash
    
    cd $1
    #cd ..
    echo `pwd`
    
    VERSION_MAJOR_NUMBER=$(cat version.mk | grep -E "VERSION_MAJOR_NUMBER" | cut -d = -f 2)
    
    VERSION_MEDIUM_NUMBER=$(cat version.mk | grep -E "VERSION_MEDIUM_NUMBER" | cut -d = -f 2)
    
    VERSION_MINOR_NUMBER=$(cat version.mk | grep -E "VERSION_MINOR_NUMBER" | cut -d = -f 2)
    
    VERSION_BUILD_NUMBER=$(cat buildnumber)
    
    echo "#ifndef VERSION_H" > version.h
    echo "#define VERSION_H" >> version.h
    echo "" >> version.h
    echo "#define VERSION_MAJOR_NUMBER $VERSION_MAJOR_NUMBER" >> version.h
    echo "#define VERSION_MEDIUM_NUMBER $VERSION_MEDIUM_NUMBER" >> version.h
    echo "#define VERSION_MINOR_NUMBER $VERSION_MINOR_NUMBER" >> version.h
    echo "#define VERSION_BUILD_NUMBER $VERSION_BUILD_NUMBER" >> version.h
    echo "" >> version.h
    echo "#define VERSION QString("V %1.%2.%3.%4").arg(VERSION_MAJOR_NUMBER).arg(VERSION_MEDIUM_NUMBER)" >> version.h
    echo " .arg(VERSION_MINOR_NUMBER).arg(VERSION_BUILD_NUMBER)" >> version.h
    echo "" >> version.h
    echo "#endif //VERSION_H" >> version.h

     

     

  • 相关阅读:
    第二周总结
    第一次结组作业概述
    Spring_Bean的自动装配
    Spring_依赖注入
    Spring_配置
    第一周总结
    1680. Concatenation of Consecutive Binary Numbers
    1631. Path With Minimum Effort
    1657. Determine if Two Strings Are Close
    1673. Find the Most Competitive Subsequence
  • 原文地址:https://www.cnblogs.com/ingy0923/p/8620818.html
Copyright © 2020-2023  润新知