8

当我尝试在 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.
4

2 回答 2

3

另请参阅此讨论:Why does Delphi change Indy's dpk source file when I change project options and this .

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

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

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

IMPLICITBUILDING 由编译器在编译包期间定义,该包被隐式编译为依赖于它的东西的编译的一部分。如评论中所述,您不应尝试自己定义此值"

于 2015-01-10T20:48:08.967 回答
2

认为它与条件块下方的{$IMPLICITBUILD ON}标志有关。只要编译器执行隐式构建(与显式构建相比),它就会被设置。我不知道为什么只有在这种情况下才应该考虑这些设置。它当然还没有记录。

于 2011-09-15T10:32:04.313 回答