首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Delphi中编译和编译有什么区别?

在Delphi中编译和编译有什么区别?
EN

Stack Overflow用户
提问于 2010-07-13 09:59:31
回答 4查看 11.8K关注 0票数 21

对于Delphi-6,有两个选项:构建和编译。

我知道当我运行一个程序时,它只编译那些已经改变的文件,并为那些没有改变的文件使用DCU,当我点击build时,显然它会重建DCU。

我一直想知道的是,当我编写一个程序进行发布时(更改构建设置、条件变量等)。我可以只编译,或者我必须进行完整的构建吗?

如果我没有做一个完整的构建,会发生什么,有什么要求吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-07-13 17:07:03

编译时使用

只有当.pas源文件的日期时间戳更改(1,2)时,编译器才会自动重新编译单元。

对于项目中的其他状态更改(指令、调试或其他编译器设置等),编译器不会自动重新编译。这时您需要强制进行构建。

当.inc或其他包含的($I)文件更改(3)时,您还需要强制重新构建,因为没有检查它们的日期时间戳。

因此,总而言之,当单元.pas文件以外的任何内容发生更改时,您都需要进行构建。

在构建中有一些奇怪的案例。大多数情况下会出现"can't find unit xxx"错误,而它似乎就在那里

  1. one是当项目中的单元路径错误时,或者在工作目录错误时使用相对路径。(参见Delphi debug a wrong unit )
  2. (我不完全确定这一点,这是一个假设)由于CRCs (1),.dcu被重新编译,但新编译的dcu被放在不同的目录中。这对于当前编译来说不是问题(因为正确的dcu已经被加载),但是在随后的编译(例如依赖包)中,旧的dcu文件被再次发现,并且源不是->错误。如果有疑问,请始终通过递归删除.dpr

中提到的带有错误路径的所有DCU's

  • the单元来清理构建目录

(1)如果Delphi类似于FPC,则.dcu包含它所依赖的所有dcu的接口部分的CRC。这可以用来检查是否还需要重新编译。例如,由于文件系统操作(移动dcu的关于)

(2)对于专家,也可以看看{$implicitbuild xx}

(3)与Delphi相反,FPC确实会在.inc更改时重建。FPC项目在内部大量使用.inc文件,这一更改早在Delphi支持之前就已经存在了。因此,将“定义”inc文件复制到任何目录的包都不能使用FPC进行编译,因为它们的大小和CRC通常略有不同。Indy (10)就是一个很好的例子。

票数 19
EN

Stack Overflow用户

发布于 2010-07-13 10:38:45

@Daisetsu,这里是构建和编译之间的区别。

当源代码可用时,Build将编译项目中所有使用的单元。

Compile仅编译更改过的已用单位。

根据我的个人经验,当您更改编译器的配置时,您必须执行应用程序的构建,以便更改将反映在项目的所有单元中。

票数 27
EN

Stack Overflow用户

发布于 2010-07-13 10:34:14

您应该始终在更改设置时进行构建。

先前编译的DCU文件可能已经使用不同的设置进行了编译,例如编译器定义。这会导致同一项目中的两个单元使用不同的设置进行编译。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3233671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档