Delphi条件编译

时间:2010-06-23 10:20:28

标签: delphi compiler-construction executable delphi-2010

我需要知道是否有任何选项来编译delphi项目,只有在源或任何使用过的单元,包等已经更改的情况下。

如果这是不可能的,第二种选择:是否有任何选项可以生成完全相同的二进制文件,编译两次相同的项目。

感谢。

编辑:用于基于哈希的WebUpdate。

3 个答案:

答案 0 :(得分:2)

Delphi“compile”将只编译已更改的单元。但正如所说,单位有数据,所以编译器可以检查哪些需要更新,哪些不需要。并且可执行文件可以更改,因为构建过程可以重新排列exe。您的Web更新不应使用文件哈希,它应使用版本信息来决定更新内容和不更新内容。这就是安装程序检查应该替换哪些文件的方式。

答案 1 :(得分:0)

Delphi仅在编译时编译已更改的单位,并编译所有单位,而不管构建中的更改状态。

Exe在二进制级别上永远不会相同。刚刚构建了一个项目两次,将exe重命名为txt扩展,并将它们与Beyond Compare进行比较:它显示了差异。

答案 2 :(得分:0)

一个(硬)解决方案:使用Makefile制作你的前任! makefile允许你说“这个exe是由那些文件,使用这些命令”。 Make只会运行“那些命令”,如果你列出的至少一个文件构成你的exe文件比你的exe更新。

这方面的难点在于设置组成exe的文件列表:您可以轻松获取DPR / DPROJ中列出的文件列表,但您还需要识别所有链接的资源($ R),所有包含的文件($ INCLUDE),所有由Delphi编译的文件,因为它们在“uses”子句中使用,可以在Library Path中找到。

为一般情况生成Makefile非常困难,但对于某个特定项目,它可能会起作用。例如,您可能认为您的文件仅依赖于DPR文件中列出的文件,然后确保将所有相关文件添加到DPR。