如何使包依赖/需求依赖于条件符号?

时间:2011-12-07 12:48:47

标签: delphi build-automation delphi-2009

我有一个包Package1,它取决于包PackDependencyPackage1 .dpk 包含以下内容:

requires
  vcl,
  rtl,
  PackDependency,
  dbrtl;

现在我想只有在定义了条件符号CONDITION时才有这个依赖。因此,我手动将 .dpk 文件更改为:

requires
  vcl,
  rtl,
  {$IFDEF CONDITION}
  PackDependency,
  {$ENDIF}
  dbrtl;

但这够了吗?我担心 .dproj 文件。

我有两个像Package1这样的软件包我想用上面的方法做。其中一个在 .dproj 文件中包含以下行:

  <DCCReference Include="PackDependency.dcp"/>

其他软件包' .dproj 包含此行,即使该软件包也依赖于PackDependency

这提出了一些问题:

  • 是否可以require基于条件符号的包?
  • 如果是,我是否必须对.dproj文件执行某些操作?如果是的话,如果Delphi修改了文件的某些区域,我会遇到麻烦吗?
  • 为什么上面的<DCCReference Include...>行包含在其中一个.dproj文件中而不包含在另一个中(尽管两个包在其.dpk中都有依赖关系,并且也显示在Delphi项目管理器中)?
  • 我怀疑使用msbuild从Delphi和命令行构建时会有不同的行为。前者可能会查看.dpk文件 - 但后者是什么?

我的最终目标是使用msbuild从命令行构建。因此命令行和IDE之间的不同行为对我来说也是重要的信息。

1 个答案:

答案 0 :(得分:2)

这将在您在问题中解释时正常工作,直到您向包中添加新单元!此时,您的条件定义将被IDE自动删除,您将不得不再次将它们放入(这很烦人)。

我知道没有优雅的方法来避免这种情况!

不要太担心DPROJ文件......因为它们应该由IDE维护,因此删除DPK源中的依赖项应该(在编译时)删除DPROJ中的任何相应节点(添加时)在编译时,DPK中的依赖项应该将相应的节点注入到DPROJ中。