Qt版本递增

Qt Version Incrementing

本文关键字:版本 Qt      更新时间:2023-10-16

我正在使用一个批处理文件来增加上一个版本号。我在.pro文件中将其设置为一个变量,然后在main.cpp中尝试将Qstring设置为版本号,然后使用QDebug查看该数字是否正确。到目前为止,尚未调用批处理文件,并且将QString设置为版本号时的最后一个args"太少",并显示警告消息。

.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();
}

首先,调用外部程序的qmake语法是

VARIABLE=$$system(autoincrement.bat)

相反,您要做的是获取一个名为autoincrement.bat的环境变量的值。

第二,你的代码仍然会有的问题

  • 除非pro文件发生更改,否则qmake不会自动在其上运行
  • 除非源文件也发生更改,否则不会重新生成它们

因此,通过这种方式,实际上很难进行版本提升并重新编译代码。与其他构建系统不同,qmake不支持这种"特殊"变量,这些变量会发生变化,导致依赖代码需要重新编译。您的第二种方法(生成一个version.h文件(肯定更好。

以下是我为Windows的每个构建迭代的解决方案(当然更喜欢Bash(:

  1. 创建包含以下内容的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%
    

    运行一次以创建其他文件。

  2. 接下来,转到qt中的项目,并添加一个要调试和运行的构建步骤
  3. 将批处理文件放入命令中,然后转到.pro文件夹,该批处理位于工作目录中
  4. 接下来,将version.h文件添加到项目中
  5. 最后,您必须在每个要使用版本号的文件中包含version.h