2012-01-09 72 views
14

我爲Delphi編寫了很多組件和庫,其中大部分需要使用BPL Packaging,以便它們可以安裝到IDE中。包(BPL)自動命名後綴

這很簡單,運行良好,直到您想要維護一組Package Package項目文件(在一個Project Group中),但也想爲不同的Delphi版本編譯和分發這些相同的Package。

到現在爲止我已經創造了德爾福的每個版本不同的套餐項目,並明確定義一個Delphi版本標識符作爲後綴(例如Kinect_XE.bplKinect_XE2.bpl)。

我知道,在一個包項目的項目選項說明,有田野LIB前綴和(更重要的是我的需要)LIB後綴

我進一步意識到,如果我在LIB後綴中放置一個值,它將被追加到編譯的BPL文件名的末尾。

我的問題,但是,首先是否有可能有IDE與IDE/RTL版號自動填充LIB後綴場,如果是的話......怎麼樣?

我相當肯定這是可能的,因爲這將只使用看來,vcl120.bpl及其同行德爾福的每個相應的版本)可以被引用(如需要)自己包vcl,而不必輸入完整的vcl120。事實上,這是我希望達到的相同行爲......我的軟件包可以在內部引用彼此(根據需要),而不必提供特定於版本的引用來容納後綴。

同樣重要的是,解決這個問題將使我能夠在單個項目組中保留一組項目文件(顯然,XE2除外,其項目文件不一定與以前版本的Delphi應有的表現非常好)到平臺另外)。

我懷疑我可能需要把一個價值像$(VER)(或類似的東西)在LIB後綴領域,但這似乎沒有工作,我已經沖刷谷歌尋找正確解。

希望你能幫助!

更新1

我現在正在寫一個IDE插件與(在最起碼)一起使用德爾福2007年XE2,這給DLL和BPL項目的新選項稱爲AutoSuffix。當切換上,安裝了AutoSuffix插件的任何IDE都會立即將正確的IDE版本後綴應用於該項目。

The AutoSuffix插件將在未來24小時內爲所有人提供(免費),並且相應更新此問題。

更新2

好了...德爾福2007年是正在痛苦!到目前爲止,我已將AutoSuffix與2009年的XE2工作在一起,但2007年需要多一點時間(耐心讚賞)。

更新3

好像Embarcadero公司也聽到了我們的版本之間simplier包統一的集體吶喊這樣看來。

馬克將推動這一點,看看德爾福的未來版本是否可以容納{$ LIBSUFFIX AUTO}功能。我希望很快能聽到這是否會是這樣。如果是這樣,它肯定會影響AutoSuffix將需要在XE2和舊版本上工作(因爲它目前不提供簡單的AUTO開關..它有自己的方法)。

我希望現在是,教統局會認真考慮這一請求,提供它作爲一個整體特徵向前發展,使之成爲使用AutoSuffix現有版本統一翻過所有版本的進程的一個簡單的例子!

+0

不是編譯器版本,而是一個IDE/RTL版本。 – OnTheFly 2012-01-09 16:58:24

+0

正確...編輯!我的一個愚蠢的錯誤! – LaKraven 2012-01-09 17:01:28

+2

我收到**沒有報告#83229,或者您無權查看該報告。**當我嘗試訪問它時(登錄) – LaKraven 2012-01-09 19:26:49

回答

5

對於德爾福達到XE2 AFAIK沒有這樣做的自動化。

關於需要條款:當你require你實際上是使用DCP,不繼承LIBSUFFIX另一個包。因此在編譯期間需要VCL.dcp就足夠了,而在運行期間實際使用VCL160.bpl。 DCP包含完整的BPL名稱以解決該問題。

這使得LIBSUFFIX方法優於簡單的「爲Delphi的每個版本重命名包」之一。

類似於QC83229中提出的解決方案可以更容易地將軟件包移植到較新的Delphi版本,但是仍然會遇到不向後兼容的dproj文件。

我通常爲每個Delphi版本使用不同的文件夾,其中只存儲項目文件。對於新的Delphi版本,我只需要複製一個文件夾並更改LIBSUFFIX。

+0

+1,不錯的想法。它是否被QC? – kludg 2012-01-09 19:59:54

+0

@Serg:是的,但暫時是私人的。查看評論 – 2012-01-09 20:04:20

+0

我正在構建一個插件來解決我們說的問題! – LaKraven 2012-01-09 20:20:09

3

LIBSUFFIX指令位於* .dpk文件中,您可以手動編輯* .dpk文件。

你可以寫,例如

{$IFDEF CONDITIONALEXPRESSIONS} 
    {$IF CompilerVersion = 20.0} 
{$LIBSUFFIX '120'} 
    {$IFEND} 
    {$IF CompilerVersion = 21.0} 
{$LIBSUFFIX '140'} 
    {$IFEND} 
{$ENDIF} 

壞的事情是,IDE不尊重您的* .dpk文件的手動編輯並刪除它們,那麼你做出一個包的變化。這就是爲什麼一些使用條件在* .dpk文件中定義的組件供應商如果要求保存更改,請在安裝說明中說'不'。

+0

也存儲在屬性名稱爲'DllSuffix'下的.dproj文件中。我不知道哪個設置獲勝,以及它爲什麼重複。 – 2012-01-09 17:30:33

+0

另外,這些指令應該位於軟件包源代碼的最底部,因爲系統直到'contains'結束纔會在範圍內。 – OnTheFly 2012-01-09 17:36:16

+5

德爾福的整個軟件包安裝是一個地獄。在Delphi 7中,你有兩個文件包信息(* .dpk和* .res),現在你有3個文件,有重複,儘管1個文件已經足夠了。不幸的是,英巴卡迪諾不在乎。 – kludg 2012-01-09 17:48:48

2

我的建議是將此添加爲項目選項集的可配置選項(請參見QC#86491。)而不是更新所有的軟件包,只需更新一個選項集文件即可。

事實上,似乎DllSuffix標籤被Delphi XE/XE2中的選項集文件識別。將<DllSuffix>160</DllSuffix>添加到選項集文件的<PropertyGroup>部分將導致將後綴追加到項目管理器中的包中。但是,您仍然必須打開項目選項並單擊確定,以便將其保存到.dpk文件。

我同意,這將是這一功能是非常有用的(我也覺得在RTL包。)