【问题标题】:Delphi XE2: What is the purpose of IMPLICITBUILDING directive found in packageDelphi XE2:在包中找到 IMPLICITBUILDING 指令的目的是什么
【发布时间】:2011-09-15 07:16:25
【问题描述】:

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

【问题讨论】:

    标签: delphi delphi-xe2


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 这似乎是解决使用 msbuild 脚本编译软件包忽略所有 dproj 编译器选项的问题的解决方法,因为它们是由编译器从 dpk 文件中读取的。
      • @Andreas:啊,是的,这就解释了。
      • @RudyVelthuis 我对 Delphi 生态系统非常陌生。您能解释一下隐式构建和显式构建之间的区别吗?我确实搜索过,但没有发现任何有用的东西。谢谢!
      • AFAIK(但我可能错了),IMPLICITBUILD ON 表示如果需要将重建包,而 OFF 表示只有在用户开始重建时才会重建它。见这里:docwiki.embarcadero.com/RADStudio/XE3/en/…
      猜你喜欢
      • 2012-04-27
      • 1970-01-01
      • 2011-12-19
      • 1970-01-01
      • 2011-11-12
      • 1970-01-01
      • 2011-11-09
      • 2011-02-17
      • 2012-10-05
      相关资源
      最近更新 更多