我需要知道是否有任何选项,以编译一个delphi项目,只有当源代码或任何使用的单元,包等已被更改。
如果这是不可能的,第二个选择:是否有任何选项,以生成完全相同的二进制编译相同的项目两次。
谢谢。
编辑:该用法适用于基于散列的WebUpdate。
发布于 2010-06-23 20:18:52
Delphi的“编译”将只编译更改过的单元。但是如上所述,单元有数据,所以编译器可以检查哪些需要更新,哪些不需要。并且可执行文件可能会更改,因为构建过程可能会重新排列可执行文件。您的web更新不应该使用文件哈希,它应该使用版本信息来决定更新什么和不更新什么。这是安装程序检查哪些文件应该被替换的方式。
发布于 2010-06-23 18:48:44
Delphi在编译时只编译已更改的单元,并且编译所有单元,而不考虑构建中的更改状态。
在二进制级别上,Exe永远不会相同。我刚创建了两个项目,将exe重命名为具有txt扩展名,并将它们与Beyond Compare进行了比较:它显示了差异。
发布于 2010-06-24 00:10:11
一个(困难的)解决方案:使用Makefile创建你的exe文件!makefile允许你说“这个exe是从那些文件中生成的,使用那些命令”。如果你列出的构成你的exe的文件中至少有一个比你的exe新,Make将只运行“那些命令”。
其中最难的部分是设置组成exe的文件列表:您可以很容易地获得DPR/DPROJ中列出的文件列表,但您还需要确定所有链接的资源($R)、所有包含的文件($INCLUDE)以及由Delphi隐式编译的所有文件,因为它们在“used”子句中使用,并且可以在库路径中找到。
为一般情况生成Makefile是非常困难的,但对于一个特定的项目,它可能会起作用。例如,您可能认为您的文件仅依赖于DPR文件中列出的文件,然后确保将所有相关文件添加到DPR中。
https://stackoverflow.com/questions/3100752
复制相似问题