使用Delphi-6有两个选项:Build和Compile。
我知道当我运行程序时,它只编译已更改的文件,并将DCU用于那些没有更改的文件。当我点击构建时,它显然会重建DCU。
我一直在想的是,当我制作一个发布程序(更改构建设置,条件变量等)时,我可以编译,还是必须进行完整构建?
如果我没有完整构建会发生什么,是否有任何后果?
答案 0 :(得分:25)
@Daisetsu,这是构建和编译之间的区别。
当源代码可用时,构建会编译项目中所有已使用的单位。
编译仅编译已更改的已用单位。
根据我个人的经验,当您更改编译器的配置时,您必须执行应用程序的构建,以便更改将反映在项目的所有单元中。
答案 1 :(得分:15)
构建时,编译时?
编译器仅在.pas源文件的日期时间戳更改时自动重新编译单位(1,2)。
在项目中的其他状态更改(指令,调试或其他编译器设置等)中,编译器不会自动重新编译。那是你需要强制构建的时候。
当.inc或其他包含的($ I)文件更改(3)时,您还需要强制重建,因为它们的日期时间戳未被检查。
总而言之,当除了单位.pas文件之外的任何内容发生更改时,您需要进行构建。
建筑中有一些奇怪的情况。大多数会导致“无法找到单位xxx”错误,而它似乎在那里
(1)如果Delphi就像FPC,.dcu包含所有dcu的接口部分的CRC,它取决于。这可用于检查是否还需要重新编译。例如。由于文件系统操作(移动dcu的)
(2)对于专家来说,看看{$ implicitbuild xx}
(3)与Delphi相反,FPC确实在.inc更改上重建。 FPC项目在内部大量使用.inc文件,这个更改已经存在于Delphi支持之前。 因此,将“define”inc文件复制到任何目录中的软件包将无法使用FPC进行编译,因为它们的大小和CRC通常略有不同。 Indy(10)就是一个很好的例子。
答案 2 :(得分:3)
更改设置时应始终构建。
以前编译的DCU文件可能已使用不同的设置进行编译,例如编译器定义。这可能导致同一项目中的两个单元使用不同的设置进行编译。
答案 3 :(得分:2)
准备发布时,您应该最肯定进行完整版本 没有理由不这样做,Delphi的编译器足够快。
对于您自己的 理智 ,我强烈建议您始终为可发布版本进行完整构建。
即使对于不可发布的版本,我也经常进行完整的构建。