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):

  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

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

VARIABLE=$$system(autoincrement.bat)

您正在做的是获取名为 autoincrement.bat.

的环境变量的值

其次,您的代码仍然存在

  • 除非pro文件改变,qmake不会自动运行就可以了
  • 除非源文件也发生变化,否则不会重建它们

因此,通过这种方式,很难真正进行版本升级和重新编译代码。与其他构建系统不同,qmake 不支持这种 "special" 变量,这些变量会发生变化并导致相关代码需要重新编译。您的第二种方法(生成 version.h 文件)肯定更好。