Delphi XE2:包中的IMPLICITBUILDING指令的目的是什么

Cha*_*ang 8 delphi delphi-xe2

当我尝试在Delphi XE2中创建一个新包时,包dpk源文件中有一个新构造:IMPLICITBUILDING

那个有什么用?

package Package1;

{$R *.res}
{$IFDEF IMPLICITBUILDING This IFDEF should not be used by users}
{$ALIGN 8}
{$ASSERTIONS ON}
{$BOOLEVAL OFF}
{$DEBUGINFO ON}
{$EXTENDEDSYNTAX ON}
{$IMPORTEDDATA ON}
{$IOCHECKS ON}
{$LOCALSYMBOLS ON}
{$LONGSTRINGS ON}
{$OPENSTRINGS ON}
{$OPTIMIZATION OFF}
{$OVERFLOWCHECKS OFF}
{$RANGECHECKS OFF}
{$REFERENCEINFO ON}
{$SAFEDIVIDE OFF}
{$STACKFRAMES ON}
{$TYPEDADDRESS OFF}
{$VARSTRINGCHECKS ON}
{$WRITEABLECONST OFF}
{$MINENUMSIZE 1}
{$IMAGEBASE $400000}
{$DEFINE DEBUG}
{$ENDIF IMPLICITBUILDING}
{$IMPLICITBUILD ON}

requires
  rtl;

end.
Run Code Online (Sandbox Code Playgroud)

WeG*_*ars 3

另请参阅此讨论:当我更改项目选项时,为什么 Delphi 会更改 Indy's dpk 源文件.

“在显式编译包时,出现在 $IFDEF IMPLICITBUILDING 和 $ENDIF 之间的编译器指令通常作为参数由编译器传递。因为这些选项会根据配置(调试/发布)和目标平台(Win32、Win64、OSX32)而变化) 在包项目源中静态定义它们是有问题的。当在项目源中定义时,它们将始终覆盖编译器传递的选项。$IFDEF 阻止在显式编译期间使用这些选项。

在隐式编译包的情况下,将使用这些选项,但除非您的项目保存在您想要编译的配置/目标模式下,否则您可能无法获得预期的结果。

作为一般规则,最好禁用包上的隐式构建,并通过项目组构建或通过项目依赖项显式编译它们。如果您仅使用单一配置为单一平台构建,那么隐式构建机制就足够了。

IMPLICITBUILDING 是由编译器在编译包时定义的,该包作为依赖于它的东西的编译的一部分而被隐式编译。正如评论中所示,您不应该尝试自己定义这个值”