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

Delphi 如何使包依赖性/需求依赖于条件符号?,delphi,build-automation,delphi-2009,Delphi,Build Automation,Delphi 2009,我有一个包Package1,它取决于包packDependence。Package1的.dpk包含以下内容: requires vcl, rtl, PackDependency, dbrtl; 现在,仅当定义了条件符号CONDITION时,我才希望具有此依赖关系。因此,我手动将.dpk文件更改为: requires vcl, rtl, {$IFDEF CONDITION} PackDependency, {$ENDIF} dbrtl; 但这足够了吗?我

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

requires
  vcl,
  rtl,
  PackDependency,
  dbrtl;
现在,仅当定义了条件符号
CONDITION
时,我才希望具有此依赖关系。因此,我手动将.dpk文件更改为:

requires
  vcl,
  rtl,
  {$IFDEF CONDITION}
  PackDependency,
  {$ENDIF}
  dbrtl;
但这足够了吗?我担心.dproj文件

我有两个软件包,比如
Package1
我想用它们来完成上面的工作。其中一个在其.dproj文件中有以下行:

  <DCCReference Include="PackDependency.dcp"/>

其他包“.dproj不包含此行,即使该包也依赖于
packdependence

这引起了一些问题:

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

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

正如您在问题中所解释的,这将很好地工作,直到您将新单元添加到包中!在这一点上,IDE将自动删除您的条件定义,并且您必须再次将它们放入(这很烦人)

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


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

这似乎很容易测试……我想避免“现在工作,以后中断”. 但我现在正在测试。如果有明确的答案,那就太好了。谢谢你的提示!我不知道添加新依赖项时,
requires
部分中的更改消失了!我刚刚测试了添加和删除条件符号。它不会影响.dproj。引用只是停留在那里。如果删除DPROJ中的引用,然后使用单元引用重新编译,是否会提示再次添加该依赖项?如果是这样,我唯一能想到的就是在每次分发项目时手动删除DPROJ引用。做两个替代包可能更容易:一个有依赖项,一个没有。。。但是,这也不是很优雅!Delphi似乎不关心我对.dproj中的引用所做的任何事情。如果我删除它们,它有时会重新创建它们,有时不会。有时在IDE中切换到不同的构建配置会触发它,有时不会。奇怪。这可能是一种需要进行清理/构建的情况,而不是只执行Shift+F9或“编译”。这并不是Delphi的“优点”之一,因为它似乎相当“严格”地对待包,对于条件依赖性之类的事情几乎没有灵活性!