【问题标题】:Qt Version IncrementingQt 版本递增
【发布时间】:2015-07-05 22:09:00
【问题描述】:

我正在使用批处理文件来增加最后一个版本号。我将它设置为.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();
}

【问题讨论】:

  • $$(autoincrement.bat) 尝试访问环境。 var 只是,iirc ($${} 意味着一个普通的 var),所以你需要用其他方式运行 .bat,本质上(我会搜索“qmake pre-build”smth)
  • @mlvljr 我想让 VERSION_BUILD 设置为数字虽然编辑:将版本放在头文件中与实际的 .pro 文件相比会有什么不同吗?
  • 只有你事先知道它是什么,我猜......我可能在 .bat 没有被调用时错了,不过:stackoverflow.com/questions/1417061/…
  • @mlvljr 我解决了这个问题,不确定它是否是正确的方法。我将常量设置为局部整数,然后将其转换为 QString,或者任何我想要的。
  • @mlvljr,是的,我知道这与旧问题相似,但它们来自 5 个以上的主要版本,因此它们已经过时了。最后我不得不通过一种完全不同的方法运行批处理文件,因为我永远无法让它在 .pro 文件中运行。无论如何感谢您的帮助!

标签: c++ qt qmake


【解决方案1】:

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

VARIABLE=$$system(autoincrement.bat)

您正在做的是获取名为 autoincrement.bat 的环境变量的值。

其次,你的代码还是会出现

的问题
  • 除非pro 文件发生变化,否则qmake 不会自动在其上运行
  • 除非源文件也发生变化,否则它们不会被重建

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

【讨论】:

    【解决方案2】:

    这是我为每个 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-27
      • 2012-01-25
      • 2016-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多