2010-01-09 36 views
3

我目前基於版本的Delphi,回到德爾福2一大堆條件編譯指令已經(隨機散落各處)「繼承」代碼工作。從現在開始,所有的開發都將與Delphi 2009或未來一起進行。 Delphi 2009中是否有一個工具,或者是一個插件,可以根據指定的「最小」版本自動刪除編譯器的條件代碼段?刪除德爾福IFDEF的編譯器指令自動

回答

6

我強烈建議Delphi Inspiration Pascal Preprocessor (DIPP)

這可以做很多的事情,除了源文件刪除有條件的定義,包括「內聯」包括文件和刪除註釋(所有課程的高度可配置性和可控通過提供給處理器的選項)。

有條件的定義功能是非常有用的,你可以擁有所有這些條件句簡單地刪除或提供了一組定義你想申請的的。然後DIPP將發出一個源文件,反映它如何在編譯器中出現符號DEFINED,但沒有條件指令本身。

因此,在您的情況下,您只需簡單定義適合您的「基準」Delphi版本的符號。

+0

+1爲DIPP。不知道它,看起來很有趣! –

+0

看起來非常有用。乾杯Jolyon – HMcG

1

我不知道這樣的工具,但它應該是相對直接的寫它。

  1. 遍歷目錄中的所有文件中使用FindFirstFindNext
  2. 使用TStringList.LoadFromFile讀取所有PAS文件。
  3. 循環遍歷字符串並查找{$IfDef}指令。如果在條件部分中指定的版本比D2009舊,請刪除所有文本,直到{$EndIf}
  4. 使用將修改後的文件寫入磁盤。
+0

不要忘記在尋找{$ ELSE}和{$ ELSEIF},如果你這樣做。 –

+0

同上{$ if if defined(x)}可以使用哪個完整表達式 –

0

使用GExperts,您可以同時使用GrepSearch或GrepRegularExpressions在你的代碼進行搜索,然後使用替換工具在GrepResults消除任何你需要的。

你可以做一個搜索和替換 列表或只選定的文件/比賽的所有比賽 操作。出現 當您選擇這些選項之一, 一個對話框,提示爲 字符串代替匹配 文字的使用。請注意,由於 IDE中的限制,當前打開的表格 不能替換其文本 。請在 之前關閉所有表格,試圖替換其中的文字。

+1

Grep不能真的更像是一種編輯技巧。它不理解ifdef條件(如果定義了(y)和defined(x)},那麼我會使用非手動的東西,我可以重試幾次,比如SED) Only使用這樣的東西時,完全沒有其他選項 –

4

你應該給試試JEDI預處理器(Pascal預處理器)。

在我們的SVN的主幹中,可以在目錄jcl/devtools/jpp和我們的最新版本(2.1)zip文件中找到源文件,可以在目錄devtools中找到jpp.exe。

1

我的建議是隻更改您完全管理的代碼。但是,如果你也要修改現有的第三方代碼,那麼我建議你通過每個爲驗證定義的IFDEF。一些供應商不使用標準的IFDEF VERxxx調用,但創建自己的可能被稱爲像VER70UP或類似的東西。最常見的地方是包含文件,因此在每個文件的開頭附近查找一個{$ I ??? INC}文件,然後分析這個文件的使用方式和方式。

分析每個$ DEFINE/$ UNDEF的另一個原因是,特定於版本的版本可能會啓用一個新的定義,您以前不會檢查最終導致死代碼的錯誤。