私は現在、Delphi 2に戻って、Delphiのバージョンに基づいた条件付きコンパイラ指令の全体を(ランダムに散在している)「継承された」コードで作業しています。今後、すべての開発はDelphi2009以降で行われます。指定された「最小」バージョンに基づいてコンパイラの条件付きコードセグメントを自動的に削除するツール、またはプラグインはDelphi 2009にありますか?
5 に答える
Delphi Inspiration Pascalプリプロセッサ(DIPP)を強くお勧めします
これは、インクルードファイルの「インライン化」やコメントの削除など、条件付き定義の削除に加えて、ソースファイルで多くのことを実行できます(もちろん、プロセッサに提供されるオプションによって高度に構成および制御できます)。
条件付き定義機能は、そのようなすべての条件を単純に削除するか、適用したいDEFINEのセットを提供できるため、特に便利です。次に、DIPPは、これらのシンボルがDEFINEDであるが、条件付きディレクティブ自体がない場合にコンパイラーにどのように表示されるかを反映するソースファイルを発行します。
したがって、あなたの場合、「ベースライン」Delphiバージョンに適切な記号を定義するだけです。
JCLのJEDIPreProcessor(Pascal PreProcessor)を試してみてください。
SVNのトランクでは、ソースはdir jcl / devtools / jppにあり、最新リリース(2.1)のzipファイルではjpp.exeはdirdevtoolsにあります。
私はそのようなツールを知りませんが、それを書くのは比較的簡単なはずです。
FindFirst
およびを使用してディレクトリ内のすべてのファイルをループしますFindNext
TStringList.LoadFromFile
すべてのpasファイルを読み取るために使用します。{$IfDef}
文字列をループして、ディレクティブを探します。条件付きセクションで指定されたバージョンがD2009より古い場合は、までのすべてのテキストを削除して{$EndIf}
ください。TStringList.SaveToFile
変更したファイルをディスクに書き込むために使用します。
私のアドバイスは、完全に管理しているコードのみを変更することです。ただし、既存のサードパーティコードも変更する場合は、検証用に定義された各IFDEFを確認することをお勧めします。一部のベンダーは、標準のIFDEF VERxxx呼び出しを使用しませんが、VER70UPなどと呼ばれる可能性のある独自の呼び出しを作成します。これの最も一般的な場所はインクルードファイルであるため、各ファイルの先頭近くにある{$ I ???。INC}ファイルを探し、これを分析して、何がどのように使用されているかを調べます。
各$DEFINE/ $ UNDEFを分析するもう1つの理由は、バージョン固有のものが、以前はチェックしていなかった新しい定義をオンにする可能性があるという事実です...最終的にデッドコードにつながります。
GExpertsを使用すると、GrepSearchまたはGrepRegularExpressionsの両方を使用してコードを検索し、GrepResultsの置換ツールを使用して必要なものをすべて削除できます。
リスト内のすべての一致、または選択したファイル/一致のみに対して検索と置換の操作を実行できます。これらのオプションのいずれかを選択すると、一致したテキストの代わりに使用する文字列を求めるダイアログが表示されます。IDEの制限により、現在開いているフォームのテキストを置き換えることはできないことに注意してください。フォーム内のテキストを置き換える前に、すべてのフォームを閉じてください。