Delphi IFDEf コンパイラ ディレクティブを自動的に削除する
-
19-09-2019 - |
質問
私は現在、Delphi 2 に遡る、Delphi のバージョンに基づいた条件付きコンパイラ ディレクティブを(全体にランダムに散在している)大量の条件付きコンパイラ ディレクティブを持つ「継承された」コードで作業しています。今後、すべての開発は Delphi 2009 以降で行われます。Delphi 2009 には、指定された「最小」バージョンに基づいてコンパイラの条件付きコード セグメントを自動的に削除するツールまたはプラグインはありますか?
解決
私は非常にデルファイインスピレーションパスカルプリプロセッサ(DIPP )の
これは、条件付きの定義を削除したファイルを含めるの「インライン化」と(すべてのプロセッサに供給されたオプションにより、高度な設定や制御当然の)コメントを削除などに加えて、ソースファイルと多くのことを行うことができます。
あなたがそのようなすべての条件文だけで削除を持っているか、適用したいのをDEFINEのセットを提供することができますどちらかとして条件付き定義の機能は特に便利です。 DIPPは、それが定義されたシンボルとコンパイラにどのように見えるかを反映したソースファイルを放射しますが、条件付きディレクティブのない自分ます。
だからあなたの場合には単にあなたの「ベースライン」Delphiのバージョンに適切な記号を定義します。
他のヒント
あなたはJEDIプリプロセッサ(パスカルプリプロセッサを)与える必要がありますしてみてください。
私たちのSVNトランクでは、ソースは、ディレクトリ内の<のhref =「https://jcl.svn.sourceforge.net/svnroot/jcl/trunk/jcl/devtools/jpp」のrel = "nofollowを見つけることができますnoreferrer "> JCL /デベロッパーツール/ JPP と私たちの最新のリリース(2.1)のzipファイルにjpp.exeはDIRデベロッパーツールで見つけることができます。
そのようなツールは知りませんが、比較的簡単に作成できるはずです。
- ディレクトリ内のすべてのファイルをループします。
FindFirst
そしてFindNext
- 使用
TStringList.LoadFromFile
すべての PAS ファイルを読み取ります。 - 文字列をループして探します
{$IfDef}
指令。条件セクションで指定されたバージョンが D2009 より古い場合は、条件セクションに指定されるまですべてのテキストを削除します。{$EndIf}
. - 使用
TStringList.SaveToFile
変更されたファイルをディスクに書き込みます。
私のアドバイスは、自分が完全に管理しているコードのみを変更することです。ただし、既存のサードパーティ コードも変更する場合は、検証のために定義された各 IFDEF を確認することをお勧めします。一部のベンダーは、標準の IFDEF VERxxx 呼び出しを使用せず、VER70UP などと呼ばれる独自の呼び出しを作成します。これが発生する最も一般的な場所はインクルード ファイル内です。そのため、各ファイルの先頭近くにある {$I ???.INC} ファイルを探し、何がどのように使用されているかを分析します。
各 $DEFINE/$UNDEF を分析するもう 1 つの理由は、バージョン固有の定義により、これまでチェックしていなかった新しい定義がオンになる可能性があるという事実です。最終的にはデッド コードにつながる可能性があります。
GExperts に、あなたのコードで検索するGrepSearchまたはGrepRegularExpressions両方を使用して、置き換えを使用することができます使用します何が必要削除するGrepResultsでツールます。
あなたは、検索を行うと置き換えることができます で試合のすべての操作 リストまたはのみ、選択したファイル/マッチ。 あなたはそれらのいずれかのオプションを選択すると、 ダイアログが表示されますの入力を求めます マッチの代わりに使用する文字列 テキスト。フォームはそのことに注意してください 現在開いている彼らのテキストを持つことができません 、中に制限による置き換え IDE。前にすべてのフォームを閉じてください その中のテキストを置換しようとしています。