公司有一個控制項是用delphi編的,有bug需要修改,我接手之後就開始修改。因為工程使用了大量的外部控制項,而且有些原始碼需要用最新版替換掉,所以我決定把這些外部控制項的原始碼整合到一個project group中去。原來以為簡單的一個dpk工程的compile和install,誰知道這個工作耗費了將近2天時間。問題很簡單,不是不能通過編譯,而是明明編譯成功的bpl檔案,卻報告路徑找不到。
經過時斷時續的多種方法嘗試,終於找到了一個比較滿意的工程路徑設定規範,記錄如下。
在delphi中有兩處涉及到路徑的配置,一個是菜單tools\options中的environment options/delpihi options/library位置,使用者可以設定庫檔案尋找路徑(library path),包輸出路徑,dcp檔案的輸出目錄,原始碼瀏覽路徑等,我這裡用到兩個,一個是package output directory,另外一個是dcp output directory。前者是bpl包的輸出目錄,後者是dcu檔案的輸出目錄。這個是系統預設的輸出設定,我們這裡也不要去修改。
另外一處是project本身的options設定,這裡和預設輸出有些不一樣,設定的是輸出目錄(output directory),單元檔案輸出目錄,尋找路徑,dcp輸出目錄等。我們這裡要做如下的設定:
output directory:留空,使用全域設定
dcp output directory:留空,使用全域設定
unit output directory:所有工程設定成同一個輸出,比如..\output。記住要設定路徑,否則別人拿到你的工程一樣會麻煩。
search path:該位置用於告訴編譯器如何尋找pas、dcu檔案。一定要包含unit output directory的內容,比如..\output。看情況加入其他的尋找位置。
這樣設定之後,整體編譯就不會出問題了。原理很簡單:以上兩個留空的設定會自動使用相應的全域設定,而這兩個全域設定已經被包含在預設的全域尋找路徑中了。
我決定把這個設定作為公司的標準設定。
-------------------------------------------------------------------
以下附錄是delphi相關檔案尾碼的含義,摘自這裡:
.dcu: (delphi compiled unit)原始碼編譯之後的輸出檔案,一個原始碼檔案對應一個dcu檔案,只有原始碼檔案被修改之後才會重新編譯,用於加速編譯過程。
.dfm: (delphi form)和pas檔案配合,定義介面。
.dcp: 二進位映像檔案,包含符號資訊和ide需要的其他附加資訊,ide構建工程的時候需要這個檔案。
.bpl或者.dpl:設計時包或者運行時包。其實是一個加入了delphi特性的dll檔案。