Delphi 7每次构建都编译组件

4

通常情况下,我编译时不显示编译器进度,但我决定打开它。

我发现当我的程序编译时,它同时也在编译它所使用的组件。例如,它使用Toolbar2000(TB2K),在编译进度窗口中,我可以看到它正在编译TB2kDock.pas等文件。

这是设计上的问题吗?也许有一个设置可以告诉它不要每次重新编译组件(因为它们没有改变),只编译程序实际源代码目录中的内容吗?


1
只要编译器能够找到 .dcu 文件,并且 .pas 文件自上次修改以来没有被更改,它们就不需要重新编译。你的库路径中是否包含了 .dcu 文件所在的路径?或者你可能选择了“构建”而不是“编译”? - user743382
2
听起来像是项目的搜索路径没有正确设置。组件的源文件夹在搜索路径上,但预编译的包二进制文件夹不在其中,因此编译器会先找到.PAS源文件,而不是或者在找到DCU/BPx文件之前。 - Remy Lebeau
也要检查一下你的IDE的搜索路径设置,并确保它们被正确地设置。库路径上的目录应该只有.dcu文件,而不是.pas文件。 - afrazier
1
是的,在路径中将源目录放在dcu目录之后。这将确保三件事:1)将使用dcu;2)可以找到res文件而无需复制;3)如果dcu被删除,将使用源代码(其dcu应该最终位于源代码文件夹中,除非指定了单元输出路径,那么您应该在那里找到它)。 - Marjan Venema
换句话说,@Chris,这些组件是否安装在运行时包中? - Jerry Dodge
显示剩余9条评论
2个回答

0
编译应该只重新编译您更改的单元并创建新的dcu文件。链接器始终必须从dcu文件重新构建Exe。构建将为所有pas文件重新创建dcu文件,无论您是否修改了它们。

1
欢迎来到StackOverflow。你说的是正确的,但不幸的是并没有回答OP在他最后一段中提出的问题。 - MartynA

-1

在你深入了解这个问题之前,你必须明白编译应用程序和构建应用程序是两个不同的概念。据我所知,当你编译应用程序时,Delphi会修改exe文件并简单地更改你在应用程序代码中所做的更改。而当你构建应用程序时,它会替换exe文件。

因此,当你构建应用程序时,它将重新编译设置和选项中列出的所有组件单元,但当你仅编译它时(即使它说正在编译该单元),实际上只是在搜索需要在你的exe文件中修改的该单元中已更改的代码片段。

当然,我在纠正之下发言。


1
你说的有一半对:编译器只会搜索修改过的 .pas 文件,但仍需重新链接整个可执行文件。它并不会“修改可执行文件”。重建则强制编译器在链接之前编译每个单元。 - afrazier

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接