从 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) 内部版本号?
内部版本号不是由 fastlane 设置的,而是由 Xcode 设置的