Qt 版本递增
Qt Version Incrementing
我正在使用批处理文件来递增最后一个版本号。我将它设置为 .pro
文件中的一个变量,然后在我的 main.cpp
中尝试将 Qstring 设置为版本号,然后使用 QDebug 查看该数字是否正确。到目前为止,批处理文件未被调用,将 QString 设置为版本号时的最后一个 args
是 "too few" 并带有警告消息。
.pro
文件有问题:
VERSION_MAJOR = 1
VERSION_MINOR = 0
VERSION_BUILD = $$(autoincrement.bat)
VERSION = $${VERSION_MAJOR}.$${VERSION_MINOR}.$${VERSION_BUILD}
DEFINES += "VERSION_MAJOR=$$VERSION_MAJOR"\
"VERSION_MINOR=$$VERSION_MINOR"\
"VERSION_BUILD=$${VERSION_BUILD}"
main.cpp
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QString version = QString("%1.%2.%3").arg(VERSION_MAJOR)
.arg(VERSION_MINOR).arg(VERSION_BUILD);
QApplication::setApplicationVersion(version);
qDebug() << version;
NewsBulletin w;
w.show();
return a.exec();
}
这是我为 Windows 的每个构建迭代的解决方案(绝对更喜欢 Bash):
创建一个 version.bat
包含:
@echo off
set /p var= <version.txt
set /a var= %var%+1
echo %var% >version.txt
break >version.h
echo #define VERSION_MAJOR 1 >version.h
echo #define VERSION_MINOR 0 >>version.h
echo #define VERSION_BUILD %var% >>version.h
echo %var%
运行 它一次创建其他文件。
- 接下来,转到
qt
中的项目并添加一个构建步骤以进行调试和 运行。
- 将批处理文件放在命令中,然后转到工作目录中批处理所在的
.pro
文件夹。
- 接下来,将
version.h
文件添加到项目中。
- 最后,您必须在要使用版本号的每个文件中包含
version.h
。
首先,调用外部程序的qmake语法是
VARIABLE=$$system(autoincrement.bat)
您正在做的是获取名为 autoincrement.bat
.
的环境变量的值
其次,您的代码仍然存在
- 除非
pro
文件改变,qmake不会自动运行就可以了
- 除非源文件也发生变化,否则不会重建它们
因此,通过这种方式,很难真正进行版本升级和重新编译代码。与其他构建系统不同,qmake 不支持这种 "special" 变量,这些变量会发生变化并导致相关代码需要重新编译。您的第二种方法(生成 version.h 文件)肯定更好。
我正在使用批处理文件来递增最后一个版本号。我将它设置为 .pro
文件中的一个变量,然后在我的 main.cpp
中尝试将 Qstring 设置为版本号,然后使用 QDebug 查看该数字是否正确。到目前为止,批处理文件未被调用,将 QString 设置为版本号时的最后一个 args
是 "too few" 并带有警告消息。
.pro
文件有问题:
VERSION_MAJOR = 1
VERSION_MINOR = 0
VERSION_BUILD = $$(autoincrement.bat)
VERSION = $${VERSION_MAJOR}.$${VERSION_MINOR}.$${VERSION_BUILD}
DEFINES += "VERSION_MAJOR=$$VERSION_MAJOR"\
"VERSION_MINOR=$$VERSION_MINOR"\
"VERSION_BUILD=$${VERSION_BUILD}"
main.cpp
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QString version = QString("%1.%2.%3").arg(VERSION_MAJOR)
.arg(VERSION_MINOR).arg(VERSION_BUILD);
QApplication::setApplicationVersion(version);
qDebug() << version;
NewsBulletin w;
w.show();
return a.exec();
}
这是我为 Windows 的每个构建迭代的解决方案(绝对更喜欢 Bash):
创建一个
version.bat
包含:@echo off set /p var= <version.txt set /a var= %var%+1 echo %var% >version.txt break >version.h echo #define VERSION_MAJOR 1 >version.h echo #define VERSION_MINOR 0 >>version.h echo #define VERSION_BUILD %var% >>version.h echo %var%
运行 它一次创建其他文件。
- 接下来,转到
qt
中的项目并添加一个构建步骤以进行调试和 运行。 - 将批处理文件放在命令中,然后转到工作目录中批处理所在的
.pro
文件夹。 - 接下来,将
version.h
文件添加到项目中。 - 最后,您必须在要使用版本号的每个文件中包含
version.h
。
首先,调用外部程序的qmake语法是
VARIABLE=$$system(autoincrement.bat)
您正在做的是获取名为 autoincrement.bat
.
其次,您的代码仍然存在
- 除非
pro
文件改变,qmake不会自动运行就可以了 - 除非源文件也发生变化,否则不会重建它们
因此,通过这种方式,很难真正进行版本升级和重新编译代码。与其他构建系统不同,qmake 不支持这种 "special" 变量,这些变量会发生变化并导致相关代码需要重新编译。您的第二种方法(生成 version.h 文件)肯定更好。