gpt4 book ai didi

delphi - 如果我更改使用它的项目的设置,是否会重新编译 "rebuild as needed"库?

转载 作者:行者123 更新时间:2023-12-03 19:18:40 24 4
gpt4 key购买 nike

我有一个使用库(DPK/视觉控件)的程序。该库是在 Debug模式下编译的。这意味着优化是关闭的,范围检查是打开的,等等。库设置为“根据需要重建”。我不打算重新分发它(仅供内部使用)。

如果我在“发布”模式下编译我的程序会发生什么?库中包含的代码会自动重新编译为“发布”模式吗?或者我必须先加载 DPK 并在“发布”模式下重新编译我的库?

更新:
与“根据需要重建”相关的 Embarcadero 的帮助说明了一切:“根据需要构建包”。
我将其解释为“如果程序以 Release模式编译,则需要重新编译库,因此我们将为您完成”。
我的解释也……符合圣经吗?

该实验表明(在上述条件下)库中包含的代码将根据 DPR 的设置而不是 DPK 的设置编译成 EXE。

编译器在重新编译其 PAS 文件时不关心 DPK 文件(仅适用于未在 IDE 中加载 DPK 时)。**

所以这是(易于在所有系统中重现)证明:
让我们称我的程序 Prog.DPR(包含 Prog.pas)和我的库 Lib.DPK(包含 LibUnit.pas)。该库包含 TMyPanel 可视化控件。 DPR 处于 Release模式。 DPK 处于 Debug模式。

I install the library. I exit the library ('Close all').
I load the DPR in IDE, I also load LibUnit (Attention: I load only the unit, not the DPK)
I put TMyPanel on my program's form.
The LibUnit is automatically added to the USES clause on my program.
I edit LibUnit. I compile. It works. New DCU file is generated for LibUnit.
I go to library's folder and I delete the DPK (and the Dproj) but I keep LibUnit.pas.
I edit LibUnit. I compile. Still works! New DCU file is generated for DCU file is generated for LibUnit.!!!!

问题是:如果没有关于如何编译 LibUnit 的信息(PDK 被删除),LibUnit 是如何编译的??????显然编译器使用了 DPR 的设置。这是“释放”模式。这意味着我的库作为“发布”集成到程序中。 .

最佳答案

在可执行文件中的调试和发布目标之间切换不会导致任何引用的运行时包被重建。

包有自己的选项,这些选项独立于使用它们的项目。这是唯一可能的设计选择。想象一下,如果你有一个包被另外两个项目 A 和 B 使用,比如说。现在,A 是为调试而构建的,但 B 是为发布而构建的。不能同时为两者构建包。

“根据需要重新构建”意味着如果最新版本相对于包的源已过时,则将重新构建包。

关于您的问题更新中的“实验”,您的 exe 很可能在运行时没有链接到包。相反,.pas 文件被直接编译并链接为您的 exe 项目的一部分。

关于delphi - 如果我更改使用它的项目的设置,是否会重新编译 "rebuild as needed"库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12088049/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com