Delphi条件编译

问题描述 投票:0回答:3

我需要知道是否有任何选项可以仅在源或任何使用的单元、包等已更改的情况下编译 Delphi 项目。

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

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

delphi executable delphi-2010
3个回答
2
投票

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


0
投票

Delphi 仅编译编译时更改的单元,并编译所有单元,无论构建时的更改状态如何。

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


0
投票

一个(困难)解决方案:使用 Makefile 制作你的 exes! makefile 允许您说“这个 exe 是使用这些命令从这些文件生成的”。仅当您列出的组成 exe 的文件中至少有一个比您的 exe 新时,Make 才会运行“那些命令”。

其中最困难的部分是设置组成 exe 的文件列表:您可以轻松获取 DPR/DPROJ 中列出的文件列表,但您还需要识别所有链接的资源 ($R) 、所有包含的文件 ($INCLUDE)、所有由 Delphi 隐式编译的文件,因为它们在“uses”子句中使用并且可以在库路径中找到。

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

© www.soinside.com 2019 - 2024. All rights reserved.