从 qmake 运行脚本以获取内部版本号

Posted

技术标签:

【中文标题】从 qmake 运行脚本以获取内部版本号【英文标题】:Running script from qmake to get build number 【发布时间】:2019-09-18 14:48:21 【问题描述】:

我正在尝试将内部版本号添加到我的 Qt 项目中,方法是将该编号包含为 DEFINE。我找到了一些例子,但我似乎无法让它们工作。基本上 build.sh 是从命令行调用的,与当前的内部版本号相呼应。该数字应在 qmake 中设置为#DEFINE,并包含在我的代码中

我在 .pro 文件中有以下代码

unix: 
    BUILDNO = $$system(./build.sh)
    DEFINES += BUILD_NUM=$$BUILDNO

else:
    DEFINES += BUILD_NUM=0

我的 build.sh 文件中的这段代码

#!/bin/bash    
n=25;#the variable that I want to be incremented
next_n=$[$n+1]
sed -i "/#the variable that I want to be incremented$/s/=.*#/=$next_n;#/" $0
echo $n

我的代码中的示例行:

a.setApplicationVersion(QString("%1.%2.%3").arg(VERSION_MAJ).arg(VERSION_MIN).arg(BUILD_NUM));

从命令行运行 build.sh 脚本就可以了。它将单个数字回显到命令行,并增加脚本中的数字。当我构建我的项目时,这个数字会增加,所以我知道它正在执行。但是当我打印 DEFINE 变量时,回显的数字没有显示在我的代码中。但是...在 Linux 上,它总是 0

【问题讨论】:

你又运行 qmake 了吗? 是的。运行 qmake 后,build.sh 脚本改变了它的内部版本号 【参考方案1】:

您的 .pro 语法不正确,因为“else”命令不应该使用“:”而是“”,因此之前的命令总是被覆盖。

unix: 
    BUILDNO = $$system(sh $$(PWD)/build.sh)
    DEFINES += BUILD_NUM=$$BUILDNO

else 
    DEFINES += BUILD_NUM=0


正如@Matt 指出的那样,如果命令在同一行,则可以使用“:”:

unix: 
    BUILDNO = $$system(sh $$(PWD)/build.sh)
    DEFINES += BUILD_NUM=$$BUILDNO

else: DEFINES += BUILD_NUM=0

【讨论】:

其实qmake中的冒号是条件/命令的分隔符,所以可以在“else”之后使用,但此时不能使用换行符:else:DEFINES+=BUILD_NUM=0 @Matt 是的,我也在考虑通过分析类似的表达方式,因为文档没有明确说明,如果没有问题,我会将其添加到我的答案中

以上是关于从 qmake 运行脚本以获取内部版本号的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式在 Android 设备中获取设备 (AOSP) 内部版本号?

更改 Jenkins 内部版本号

如何使用脚本增加浮动版本号

内部版本号不是由 fastlane 设置的,而是由 Xcode 设置的

如何以编程方式在 iOS 应用程序中显示目标的版本/内部版本号?

如何获取 Git 内部版本号并将其嵌入文件中?