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

时间:2011-09-15 07:16:25

标签: 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.

2 个答案:

答案 0 :(得分:3)

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

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

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

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

IMPLICITBUILDING由编译器在编译期间定义 作为编译的一部分隐式编译的包 取决于它的东西。正如评论所示,你应该 不要试图自己定义这个值"

答案 1 :(得分:2)

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