2011-04-21 28 views
8

我必須維護用Delphi編寫的舊軟件。源代碼樹是一個真正的混亂。我試圖做2件事:製作清晰的目錄結構並設置自動構建過程。第三方組件的項目目錄結構

現在,我已經產生下面的目錄樹

 \Project 
    \build\output 
    \dist\release 
    \dist\debug 
    \doc 
    \env 
    \res 
    \src

\src目錄包含*.pas*.dfm文件和project.dpr。各種資源(圖標,圖像和字體)都位於\res目錄中。 \env用於創建各種環境用於調試目的。 IDE設置爲將project.exe構建到此目錄中。 構建腳本存儲在build文件夾中。這些腳本在dcc32.exe的幫助下在dist\releasedist\debug文件夾中生成產品分發(在exe中有和沒有調試信息)。 build\output用於在IDE內部或構建腳本內部的構建過程中保存dcu文件。

我的方法有一點缺陷。我無法從新電腦開始,從我的回購庫中籤出驗收碼,開始構建腳本並準備好使用項目的分配。我需要先打開IDE,安裝必需的組件(例如,RXLibMemoEx),設置庫路徑等。只有在這些步驟之後,我才能運行我的構建腳本。

直到上週纔出現問題。我修改了第三方組件來修復一個bug(這個組件不再被維護:-(),所以我必須將這個組件的代碼添加到我的項目結構中。在這一點上,如果我將從回購我需要檢查是否有在第三方庫的代碼更改。如果庫的代碼已更改,我需要重新編譯組件並重新安裝。

問題

  1. 有什麼辦法來重新安裝組件在德爾福7從命令行?有沒有辦法做到這一點沒有硬編碼D7的安裝路徑?
  2. 如何將第三方零部件代碼存儲在項目樹中?
  3. 我應該在什麼地方放置bpldcu,這些零部件將在生產過程中生產。我應該把它們放在Project\build\output嗎?或者將輸出放置到另一個位置會更好(不要覆蓋Delphi設置),但是在項目配置中更改Library路徑?

回答

4

更新:注意到從命令行安裝請求部分的問題。

你不能真正從命令行安裝,但它很容易建立一些 那樣做。您可以使用DCC32.EXE編譯軟件包。

組件的安裝由註冊表項控制。 Delphi的每個版本在註冊表中的位置都不相同,但它確實遵循相同的基本模式。 例子:

2007年德爾福 HKEY_CURRENT_USER\Software\Borland\BDS\5.0\Known Packages 德爾福XE 'HKEY_CURRENT_USER \ SOFTWARE \ Embarcadero公司\ BDS \ 8.0 \已知套餐'

我們使用的FinalBuilder,之後我們建立所有第三方組件更新此。 它可以讓每個開發者保持同步。

至於目錄結構,我會先考慮版本控制,然後執行以下操作。

根目錄...

C:\dev\trunk\ 

這讓我在一個簡單的格式創建分支。

C:\dev\branch1\ 

從那裏我做到以下幾點:

我用\斌\ DCU公共目錄,因爲我做了很多包的發展,其 許多需要在設計時加載。這可以防止爲了保持Delphi的快樂而將許多 目錄添加到系統路徑。

\output\DelphiXE\Release\Bin 
\output\DelphiXE\Release\Dcu 
\output\DelphiXE\Debug\Bin 
\output\DelphiXE\Debug\Dcu 

的每一個項目,我這樣做,雖然我常常放置多個項目在同一 目錄,如果依靠:

\output\DelphiXE\Bin 
\output\DelphiXE\Dcu 

這可以,如果需要是這樣來增強對大多數相同的代碼。

\project\ (DPR/DPK Here) 
\project\source (if the project is small, if not I break it out further) 
\project\forms\ 
\project\classes\ 
\project\datamodules\ 
\project\resources\ 
\project\install\ (Install Scripts) 
etc... 

最後的組件和代碼通用於不同的項目。

\Commonlib\ (Directory for my code that common among projects) 
\Components\3rdPartyName\ 
\Components\3rdPartyName2\ 
\Components\3rdPartyName3\ 

我做這種方式,所以我知道只要使用版本控制版本號由我的申請,我的版本X的每一件事情。

頂部這一關我創建

℃的環境變量:\ DEV \行李箱\

然後我使用環境變量在系統庫路徑。 像這樣:

%MYCODE%components\3rdParty1;%MYCODE%components\3rdParty2\ 

那麼如果我要轉換分支我可以改變使用該版本的代碼庫的環境變量重新推出Delphi和一切。

+0

好的信息。這是我保留意義的工具。然後我去看看這樣開始的JVCL安裝程序,我想,也許我會修改JVCL安裝程序。 – 2011-05-06 19:00:32

6
  1. 你只需要編譯包與德爾福命令行編譯器。如果Delphi bin路徑位於您的PATH中,則不必對installtion路徑進行硬編碼。如果你的構建系統能夠從註冊表中讀取,你會得到如下路徑HKEY_LOCAL_MACHINE\SOFTWARE\CodeGear\BDS\6.0\RootDir(德爾福2009在這種情況下)。

  2. 我會爲每個軟件包添加另一個分支components和子分支。不要將它們與您的項目混合使用。

  3. 從我的經驗來看,最好的練習是讓他們在德爾福的目的地(取決於德爾福版本)。

+0

如果您推薦將'components'作爲子模塊(以mercurial的形式進行subrepos),那麼最好將'dcu'和'bpl'存儲在它們的回購站內。不是嗎?在其他情況下,有時它會使另一個使用相同組件但另一個版本的應用程序的構建過程搞糟。 – Alik 2011-04-21 21:17:55

+0

我的意思是,如果每個'component'將駐留在'component \ src'中,並且構建工具將'dcu'和'bpl'編譯爲'component \ build'。這些dcu和bpl文件將用於將組件安裝到IDE(設計階段)中。 與此同時,我的'project.dof'將被編輯爲使用庫路徑'.. \ components \ component \ src'。在構建項目工具期間,將查找此目錄並構建組件的單元以將其存儲在'project \ build \ output'中。 – Alik 2011-04-21 21:21:55

+1

@Konstantin Mikhaylov,你對「安裝組件」的看法可能有點偏離。組件作爲軟件包(DCP)安裝,並且只有一個已安裝軟件包列表,該列表不是「每個項目」。打開項目時,組件不會被安裝到IDE中,並且在關閉項目並打開另一個項目時它們不會被更改。事實上,Delphi IDE允許你一次打開多個項目!這就是爲什麼在我的回答中我說「沒有項目擁有第三方組件」,所以我不建議將它們置於與實際項目本身相同的目錄中的版本控制之下[...] – 2011-04-22 05:32:32

3

1:是的,沒有,你可以設計自己組件,在命令行(其中「命令行」是指安裝它們編程,如果你真的想命令行安裝,您可能需要編寫該工具)。第三方組件通常帶有一個安裝程序,它可以自行安裝和註冊組件。從理論上講,您可以自動執行安裝程序的所有操作,並基本上重新打包組件以供自己使用,但是您可能會遇到法律障礙。 2:第三方組件不綁定到項目。將這些文件存儲在項目目錄中並不是一個好主意。當您在其他項目中重複使用相同的組件時會發生什麼?你是否將所有源文件複製到新項目中?對於我自己的工作,我已將所有第三方組件安裝到一個文件夾中,與任何項目的目錄分開,並將該文件夾保存在版本控制下。

3:爲每個項目使用單獨的輸出目錄是一個好主意,它使得使用條件編譯變得更容易。我建議單獨的輸出目錄爲調試和發佈。關於第三方BPL,它們也不是該項目的一部分,因爲沒有一個項目「擁有它們」。

+0

我懷疑是否有任何法律障礙,以自動方式安裝組件。我們使用FinalBuilder來重建包括第三方組件的所有內容。然後我們寫了一個腳本將它們安裝到Delphi中。最大的原因是保持第三方組件的版本同步,10個不同的開發人員現在真的很容易... SVN更新。運行FinalBuilder腳本。 – 2011-04-22 17:04:09