我想在每次构建时自动增加我的项目版本。我有一个简单的程序,可以使用更新版本重新生成头文件。我想在每个版本上调用这个程序。它可以在单个项目中完成(添加构建步骤),但是使用子项目项目则相当复杂。
我已经阅读了有关此事的几个主题,并建议在.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中没有关于versiontarget
或LaunchTM
的引用
我错过了什么吗?
当我能够启动测试命令时,切换到正确的命令不是问题。
答案 0 :(得分:1)
在" versiontarget.command s "中看起来像是一个拼写错误 - 大胆的" s"您的示例代码中缺少。似乎qmake没有检查它,只是忽略它,威胁它就像"命令 s "是空的。
另一种可能有用的方法是(首先是与项目中指定的第一个目标相关的预定义事物,因此你应该在main之前执行额外的目标,因为它在取决于):
versiontarget.commands = LaunchTM
first.depends = $(first) versiontarget
QMAKE_EXTRA_TARGETS += first versiontarget
UPD :只有在构建实际发生时才知道如何运行自定义目标?
有几种解决方案,AFAIK:
如果你的版本自动增量脚本会产生一些撞击版本,例如,头文件,它将被包含并在你的项目中使用 - 只需忽略它。代码更改应该触发app build。
使用QMAKE_POST_LINK代替QMAKE_EXTRA_TARGETS,例如:
QMAKE_POST_LINK + = LaunchTM
只有在您的构建触发链接(应用程序更改)时才应该运行。
注意:这样你应该记住,版本IN应用程序将少于你存储在某个地方的版本,因为它是在编译后触发的。但是,不管怎样,它应该会给你版本差异化。