Qt 应用程序版本自动增量与 .pro 中的自定义目标

Qt app version autoincrement with custom target in .pro

我想在每次构建时自动增加我的项目版本。我有一个简单的程序,可以重新生成具有更新版本的头文件。我想在每次构建时调用这个程序。它可以在单个项目中非常简单地完成(添加一个构建步骤),但是对于子目录项目来说要复杂得多。

我已经阅读了几个关于此事的主题,并且都建议在 .pro 文件中使用自定义目标。我的主要参考是this blog post.

我做了几次测试,但我无法在构建过程中运行自定义命令。出于测试目的,我在 .pro 文件中有这段代码

versiontarget.target = version.h
versiontarget.command = LaunchTM
versiontarget.depends = FORCE
PRE_TARGETDEPS += version.h
QMAKE_EXTRA_TARGETS += versiontarget

我在这里使用 LaunchTM 作为测试目的的命令(我在 Windows;此命令启动任务管理器)。该命令从不执行,在我启动重建时也不执行,在编辑后构建时也不执行。我还注意到在生成的 Makefiles

中没有关于 versiontargetLaunchTM 的参考

我是不是漏掉了什么?

当我能够启动测试命令时,切换到正确的命令不是问题。

看起来 "versiontarget.commands" 中的错字 - 您的示例代码中缺少粗体 "s"。似乎 qmake 没有检查它而只是忽略它,威胁它就像 "commands" 是空的。

另一种可能也有效的方法是(首先是与项目中指定的 first 目标相关的预定义事物,因此您应该在 main 之前执行额外的目标,因为它在 depends 中):

versiontarget.commands = LaunchTM
first.depends = $(first) versiontarget
QMAKE_EXTRA_TARGETS += first versiontarget

UPD关于如何 运行 仅当构建实际发生时自定义目标的任何想法?

有几种解决方案,AFAIK:

  1. 如果您的版本自动递增脚本会为某些文件(例如头文件)产生版本变化,这些文件将包含在您的项目中并在您的项目中使用 - 请忽略它。代码更改应该会触发应用构建。

  2. 使用QMAKE_POST_LINK代替QMAKE_EXTRA_TARGETS,例如:

    QMAKE_POST_LINK += LaunchTM

仅当您的构建触发链接(应用更改)时才应 运行。

注意:这样你应该记住,应用程序中的版本会小于你存储在某处的版本,因为它是在编译后触发的。但是,继续,它应该会给你版本差异。

  1. 如果您使用的是 VCS(版本控制),您可以配置提交/推送(如果 git 使用)挂钩,并以这种方式增加版本。这种解决方案的好处是您可以配置自动提交到存储库的版本更改,并且如果您从存储库获取代码并构建它 - 版本将被正确设置,因为它与实际代码更改(提交)相关而不是您在本地完成的构建数。