对于Delphi-6,有两个选项:构建和编译。
我知道当我运行一个程序时,它只编译那些已经改变的文件,并为那些没有改变的文件使用DCU,当我点击build时,显然它会重建DCU。
我一直想知道的是,当我编写一个程序进行发布时(更改构建设置、条件变量等)。我可以只编译,或者我必须进行完整的构建吗?
如果我没有做一个完整的构建,会发生什么,有什么要求吗?
发布于 2010-07-13 17:07:03
编译时使用?
只有当.pas源文件的日期时间戳更改(1,2)时,编译器才会自动重新编译单元。
对于项目中的其他状态更改(指令、调试或其他编译器设置等),编译器不会自动重新编译。这时您需要强制进行构建。
当.inc或其他包含的($I)文件更改(3)时,您还需要强制重新构建,因为没有检查它们的日期时间戳。
因此,总而言之,当单元.pas文件以外的任何内容发生更改时,您都需要进行构建。
在构建中有一些奇怪的案例。大多数情况下会出现"can't find unit xxx"错误,而它似乎就在那里
中提到的带有错误路径的所有DCU's
(1)如果Delphi类似于FPC,则.dcu包含它所依赖的所有dcu的接口部分的CRC。这可以用来检查是否还需要重新编译。例如,由于文件系统操作(移动dcu的关于)
(2)对于专家,也可以看看{$implicitbuild xx}
(3)与Delphi相反,FPC确实会在.inc更改时重建。FPC项目在内部大量使用.inc文件,这一更改早在Delphi支持之前就已经存在了。因此,将“定义”inc文件复制到任何目录的包都不能使用FPC进行编译,因为它们的大小和CRC通常略有不同。Indy (10)就是一个很好的例子。
发布于 2010-07-13 10:38:45
@Daisetsu,这里是构建和编译之间的区别。
当源代码可用时,Build将编译项目中所有使用的单元。
Compile仅编译更改过的已用单位。
根据我的个人经验,当您更改编译器的配置时,您必须执行应用程序的构建,以便更改将反映在项目的所有单元中。
发布于 2010-07-13 10:34:14
您应该始终在更改设置时进行构建。
先前编译的DCU文件可能已经使用不同的设置进行了编译,例如编译器定义。这会导致同一项目中的两个单元使用不同的设置进行编译。
https://stackoverflow.com/questions/3233671
复制相似问题