如何强制预构建脚本在每次编译时都运行

5
我们目前使用Delphi 2009和GIT来开发应用程序。我们设置了一个预构建脚本,使用来自git的信息生成版本号和构建ID,并将其编译为资源包含在项目中。问题是这个脚本不会在常规编译时运行。这意味着其他开发人员可能会出现实际版本号与资源中的版本号不符的情况(特别是在git分支切换时)。
由于我们的软件用于进行一些关键计算,我们希望使用此构建ID来重现计算并跟踪问题。
除了试图强制我的开发人员经常按shift-F9之外,我如何确保在必要时运行预构建脚本(理想情况下,在每次编译时)?
更新:确实在每次编译时都会运行预构建脚本。问题是我期望在git中打标签后按F9得到不同的结果,即使没有更改任何代码。

我的预构建操作在每次编译时都会运行。我无法想象为什么你的不会运行。 - David Heffernan
当我按下F9编译/运行程序时,版本信息经常过时。Shift-F9总是可以解决这个问题。我想我可能可以更加严谨,但也可以合理地假设预构建批处理只是预先构建的,并且只有在显式构建时才会启动。 - boileau
2个回答

3
我们通过编写自定义的IDE插件,并使用IOTAIDENotifier50接口来解决类似问题。具体而言,我们使用BeforeCompile方法来测试一些所需项目设置,并生成动态版本信息(VERSIONINFO资源)。它会在每种类型的构建(编译和构建)中调用。我们还生成一个独特的exe序列号并记录所有内容,这有助于我们追踪问题,类似于您的脚本。为了完整起见,我们仅在Delphi 2007和Delphi XE中完成了此操作。

这听起来像是我自己没有资源(时间)去做的事情。你愿意分享一些你插件的源代码吗? - boileau
虽然这并不能解决你的问题,但编写这样的插件非常容易。在添加预构建和后构建操作之前,我和Steve做了完全相同的事情,而且真的很简单。 - David Heffernan

0

预构建操作在每次编译之前运行。

您在评论中指出,有时候按F9时这些操作不会运行。这是有道理的,因为F9或者运行只有在源代码被认为已经改变时才会调用编译。

BeforeCompile通知插件将以完全相同的方式运行。您的解决方案是确保在使用Ctrl+F9运行之前进行编译。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接