qt修改程序版本号与服务器不符,Qt构建时自动生成版本号

Qt构建时自动生成版本号

在项目中手动改版本号是个麻烦事。于是花点时间写了脚本自动从git的分支名或tag来获取版本号。

其实说是自动也不严谨,毕竟git的分支与标签需要还是人来操作的,但至少避免了在项目中手写版本号的过程。

如果本文对你有所帮助,你可以点赞、收藏、分享甚至是打赏,欢迎留下评论交流。

如果需要转载,也烦请在转载的文章中添加本文的地址。

版本号规则

相关文章较多,不知贴那篇合适,故直接在此做个大概说明。 生成的版本号:{MAJAR_NUMBER}.{MINOR_NUMBER}.{CHANGE_NUMBER}.{BUILD_NUMBER}

MAJAR_NUMBER 为大版本号,当出现新旧版本无法兼容时,递增。(比如旧版本与服务器版本完全无法兼容。)

MINOR_NUMBER 为中版本号,当大版本号递增时,归零。否则,当增加新功能时,递增。

CHANGE_NUMBER 为小版本号,当大版本号或小版本号递增时,归零。否则,每次发布,递增。(一般是BUG修复、优化,遗漏等)

BUILD_NUMBER 为构建版本号,每次发布增加,但不一定每次+1,因为我们使用了提交次数统计来作为构建版本号的。

大版本号、中版本号、小版本号的读取

读取规则:

会优先从release分支读取版本号,release分支名规则release/v{MAJAR_NUMBER}.{MINOR_NUMBER}.{CHANGE_NUMBER} 比如分支名为`release/v1.2.3`时,有版本号`1.2.3.{BUILD_NUMBER}`

如果当前分支名不是release分支时(即名字不符合release分支名规则),会从时间距离最近的标签名读取版本号,标签名规则v{MAJAR_NUMBER}.{MINOR_NUMBER}.{CHANGE_NUMBER} 比如tag名为`v1.2.3`时,有版本号`1.2.3.{BUILD_NUMBER}`,我们一般在master分支上添加这种标签。

构建版本号的读取

构建版本号的获取做的比较简单: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)。

目前遇到的问题

非常奇怪的,这个脚本在我的Windows上很容易导致QtCreator奔溃,但是在其他同事的机器上似乎没有这个问题。 我的QtCreator信息:

df533914c79f9a46b9e0f1b593697867.png

如果各位有相关问题的文章或QtCreater奔溃的排查方法,烦请在评论中留言帮我一把...

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值