我有一个使用库(DPK/视觉控件)的程序。该库是在调试模式下编译的。这意味着优化是关闭的,范围检查是打开的,等等。库设置为“根据需要重建”。我不打算重新分发它(仅供内部使用)。
如果我在“发布”模式下编译我的程序会发生什么?库中包含的代码会自动重新编译为“发布”模式吗?或者我必须先加载 DPK 并在“发布”模式下重新编译我的库?
更新:
与“根据需要重建”相关,Embarcadero 的帮助说明了一切:“根据需要构建包”。我将其解释为“如果程序以发布模式编译,则需要重新编译库,因此我们将为您完成”。我的解释也……符合圣经吗?
该实验表明(在上述条件下)库中包含的代码将根据 DPR 的设置而不是 DPK 的设置编译成 EXE。
编译器在重新编译其 PAS 文件时不关心 DPK 文件(仅适用于未在 IDE 中加载 DPK 时)。**
所以这里是(易于在所有系统中重现)证明:让我们称我的程序 Prog.DPR(包含 Prog.pas)和我的库 Lib.DPK(包含 LibUnit.pas)。该库包含 TMyPanel 可视化控件。DPR 处于发布模式。DPK 处于调试模式。
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 的设置。这是“释放”模式。这意味着我的库作为“发布”集成到程序中。.