Delphi包在子包中与自身冲突

时间:2016-12-12 13:20:34

标签: git delphi packages

我继承了一个Delphi项目,其中大部分内容都是在单独的Git存储库(git子模块)中存在的包中完成的。如果没有子包(git子子模块),那就不会那么糟了。

最糟糕的是,一个git子模块在主项目中使用,并作为子模块的子模块:

MainProject -> Submodule1
MainProject -> Submodule2 -> Submodule1
MainProject -> Submodule3 -> Submodule1

现在我在Submodule1中的三个单元之间存在名称冲突。

我该怎么办?我怎样才能让Delphi忽略子包中存在的单位并使它只使用第一个嵌套级别的单位?

1 个答案:

答案 0 :(得分:2)

没有“子包”。每个包都是一个独立的包。但我们假设您有以下设置:

  • 包1
    • unit1A
    • unit1B
    • unit1C
  • 包2
    • unit2A使用unit1A
    • unit2B使用unitX
  • 包装3
    • unit3A使用unit1B
    • unit3B使用unitX

如果unit2Aunit2Bunit3Aunit3B中的任何一个需要使用package1中的单位,那么该应位于requirespackage2的{​​{1}}部分,但单位package3unit1Aunit1B < em> not 位于这些软件包的unit1C部分,也不应该默默包含在内 - 如果发生这种情况,您会收到一条消息。

在上面的设置中,如果containsunitX的{​​{1}}部分中的requires不在package1内,则会自动包含它。如果在多个包中发生这种情况,则会出现命名冲突。因此,您可以将其包含在package2中,也可以从package2添加package2,或者将其放入自己的包中。

所以无论你做什么:

  • 每个单元(我们称之为A)一次只能在一个包中
  • 如果另一个单位(比方说Z)需要使用它(A),那个单位(Z)的包必须引用(在package3部分)包含单元A. 单元A不应直接包含

如果仍存在命名冲突,请重命名单位,直到每个名称都是唯一的。