2011-12-07 95 views
0

我有一个包Package1,这取决于包PackDependency。的Package1.dpk包含此:如何使包依赖/要求依赖于条件符号?

requires 
    vcl, 
    rtl, 
    PackDependency, 
    dbrtl; 

现在我想只有当条件符号CONDITION定义此dependeny。因此,我手动更改.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项目管理器中显示)?
  • 我怀疑从Delphi构建和从命令行使用msbuild时的不同行为。前者可能会查看.dpk文件 - 但后者是否?

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

+0

看来这是很容易测试... – GolezTrol

+0

我想避免“现在工作,稍后休息”。但我现在正在测试。如果有明确的答案,会很好。 –

回答

2

这将工作正常,因为你已经在问题中解释,直到你添加一个新的单位到包!此时,您的条件定义将被IDE自动擦除,并且您必须再次将它们放入(这很烦人)。

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

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

+1

感谢您的提示!我不知道在添加新的依赖关系时,“requires”部分中的更改消失了!我只是测试添加和删除条件符号。它不会影响.dproj。参考只停留在那里。 –

+0

如果您删除了DPROJ中的引用,然后使用单元引用重新编译,它会提示再次添加该依赖关系吗?如果是这样,我唯一能想到的就是每次打算分发项目时手动删除DPROJ参考。 做两个替代包可能会更容易:一个具有依赖性,一个不具有......但是,这不是很高雅! – LaKraven

+0

德尔福似乎并不在乎我对.dproj中的引用所做的任何事情。如果我删除它们,有时会重新创建它们,有时不会。有时切换到IDE中的其他构建配置会触发它,有时不会。奇怪。 –