Qt 构建时自动生成版本号

构建版本号的读取

构建版本号的获取做的比较简单:git rev-list HEAD --count

具体实现

有文件 get-version-from-git.pri

# get-version-from-git.pri# 版本号构成 MAJAR_NUMBER.MINOR_NUMBER.CHANGE_NUMBER.BUILD_NUMBER
message(/**************[START] reading app version**************/)

MAJAR_NUMBER = 0
MINOR_NUMBER = 0
CHANGE_NUMBER = 0
BUILD_NUMBER = 0# 从git分支名中,读取 大、中、小版本。若当前分支不是发布分支,将尝试从最近git标签中读取。
exists(.git) {

#git提交数作为构建版本号。
    BUILD_NUMBER = $$system(git rev-list HEAD --count)

#git分支名称
    GIT_BRANCH = $$system(git symbolic-ref --short -q HEAD)
    message(git branch = $$GIT_BRANCH)
    GIT_BRANCH_PREFIX = $$str_member($$GIT_BRANCH,0,7)
    equals(GIT_BRANCH_PREFIX,"release/"){
        VERSION_NUMBER_STRING = $$replace(GIT_BRANCH,[^0-9+|\.],"")
        VERSION_NUMBER_LIST = $$split(VERSION_NUMBER_STRING,".")
        VERSION_NUMBER_LIST_SIZE = $$size(VERSION_NUMBER_LIST)
    }else{
        message("current git branch is not release branch, release branch name should start withs 'release/'.")
    }

    lessThan(VERSION_NUMBER_LIST_SIZE,3){
        message("can not read version from git branch name, try to read version from nearest git tag.")
        GIT_NEAREST_TAG = $$system(git describe --tags)
        message(git nearest number = $$GIT_NEAREST_TAG)
        VERSION_NUMBER_STRING = $$replace(GIT_NEAREST_TAG,[^0-9+|\.],"")
        VERSION_NUMBER_LIST = $$split(VERSION_NUMBER_STRING,".")
        VERSION_NUMBER_LIST_SIZE = $$size(VERSION_NUMBER_LIST)
    }
    greaterThan(VERSION_NUMBER_LIST_SIZE,2){
        MAJAR_NUMBER = $$member(VERSION_NUMBER_LIST,0)
        MINOR_NUMBER = $$member(VERSION_NUMBER_LIST,1)
        CHANGE_NUMBER = $$member(VERSION_NUMBER_LIST,2)
        VERSION = $$MAJAR_NUMBER"."$$MINOR_NUMBER"."$$CHANGE_NUMBER"."$$BUILD_NUMBER
        system(echo"VERSION=$$VERSION">version.pri)
    }else{
        include(version.pri)
        message("can not read version from git! using version.pri")
    }
} else {
    include(version.pri)
    message("can not read version from git! using version.pri")
}
message(majar number = $$MAJAR_NUMBER)
message(minor number = $$MINOR_NUMBER)
message(change number = $$CHANGE_NUMBER)
message(build number = $$BUILD_NUMBER)
message(app version = $$VERSION)
message(/***************[END] reading app version***************/)

在构建动态库或者应用的 pro 文件中添加 include(get-version-from-git.pri)。

注意:在linux, win  可以运行,但是,显示与 git风格,在最后几个字段上不符,需要自行修改。

参考:https://my.oschina.net/gimholg/blog/4988826

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值