【问题标题】:How to make package dependencies/requirements dependent on conditional symbols?如何使包依赖项/要求依赖于条件符号?
【发布时间】:2011-12-07 12:48:46
【问题描述】:

我有一个包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 修改,我会遇到麻烦吗?
  • 为什么上面的 &lt;DCCReference Include...&gt; 行包含在其中一个 .dproj 文件中而不包含在另一个文件中(即使两个包在它们的 .dpk 中都有依赖关系并且也在 Delphi 项目管理器中显示)?
  • 我怀疑从 Delphi 和使用 msbuild 从命令行构建时的行为不同。前者可能会查看 .dpk 文件 - 但后者会吗?

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

【问题讨论】:

  • 这似乎很容易测试...
  • 我想避免“现在工作,以后休息”。但我现在正在测试。如果有明确的答案就好了。

标签: delphi build-automation delphi-2009


【解决方案1】:

正如您在问题中解释的那样,这将正常工作,直到您将新单元添加到包中!那时,IDE 将自动删除您的条件定义,您必须重新放入它们(这很烦人)。

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

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

【讨论】:

  • 感谢您的提示!我不知道我在requires 部分的更改在添加新依赖项时消失了!我刚刚测试了添加和删除条件符号。它不会影响 .dproj。参考只是停留在那里。
  • 如果删除 DPROJ 中的引用,然后使用单元引用重新编译,是否会提示再次添加该依赖项?如果是这样,我唯一能想到的就是每次您打算分发项目时手动删除 DPROJ 引用。做两个替代包可能更容易:一个有依赖项,一个没有......但同样,这不是很优雅!
  • Delphi 似乎并不关心我对 .dproj 中的引用所做的任何事情。如果我删除它们,它有时会重新创建它们,有时不会。有时在 IDE 中切换到不同的构建配置会触发它,有时不会。奇怪。
  • 这可能是您需要进行清理/构建而不只是 Shift+F9 或“编译”的情况之一。
  • 这并不是 Delphi 的“强项”之一,因为它似乎非常“严格”地对待包,对于条件依赖等事情几乎没有灵活性!
猜你喜欢
  • 2020-06-21
  • 1970-01-01
  • 2015-11-21
  • 2014-08-20
  • 2015-02-10
  • 1970-01-01
  • 2014-04-04
  • 1970-01-01
  • 2014-09-12
相关资源
最近更新 更多