2011-12-07 136 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中的其他構建配置會觸發它,有時不會。奇怪。 –