在.pro中使用自定义目标的Qt app版本自动增量

时间:2016-10-21 12:01:33

标签: qt versioning

我想在每次构建时自动增加我的项目版本。我有一个简单的程序,可以使用更新版本重新生成头文件。我想在每个版本上调用这个程序。它可以在单个项目中完成(添加构建步骤),但是使用子项目项目则相当复杂。

我已经阅读了有关此事的几个主题,并建议在.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上;此命令启动任务管理器)。该命令永远不会执行,也不会在我启动重建时执行,也不会在编辑后生成。我还注意到生成的Makefile中没有关于versiontargetLaunchTM的引用

我错过了什么吗?

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

1 个答案:

答案 0 :(得分:1)

在" versiontarget.command s "中看起来像是一个拼写错误 - 大胆的" s"您的示例代码中缺少。似乎qmake没有检查它,只是忽略它,威胁它就像"命令 s "是空的。

另一种可能有用的方法是(首先是与项目中指定的第一个目标相关的预定义事物,因此你应该在main之前执行额外的目标,因为它在取决于):

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

UPD 只有在构建实际发生时才知道如何运行自定义目标?

有几种解决方案,AFAIK:

  1. 如果你的版本自动增量脚本会产生一些撞击版本,例如,头文件,它将被包含并在你的项目中使用 - 只需忽略它。代码更改应该触发app build。

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

    QMAKE_POST_LINK + = LaunchTM

  3. 只有在您的构建触发链接(应用程序更改)时才应该运行。

    注意:这样你应该记住,版本IN应用程序将少于你存储在某个地方的版本,因为它是在编译后触发的。但是,不管怎样,它应该会给你版本差异化。

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