7

RCファイルが変更された場合、Delphiはそれを再度コンパイルします。RCファイルに変更されたファイルを参照するRCDATAまたはBITMAP宣言がある場合、Delphiは、.RESファイルを削除するか、「タッチ」(ファイルのタイムスタンプを変更)を実行して強制するまで、.RCファイルを.RESに再コンパイルしません。トップレベルの.RCファイル。

TEST.RCファイルのサンプルは次のとおりです。

SAMPLE   RCDATA "File.txt"

TEST.RCが変更されると、「File.txt」が変更されると再コンパイルが発生しますが、Delphiは「コンパイル」でリソースを再コンパイルしません。「ビルド」を使用すると、時間が数秒から数分に増えるため、使用するつもりはありません。

Delphiが.RCテキストファイルと依存関係を適切に処理できるようになったことがありますか?リソースを追加して変更しない人もいますが、.RCファイルのRCDATAセクションにあるバイナリデータやテキストデータなど、頻繁に変更する可能性のあるものに.RCファイルを使用し始めました。

ビルド前またはビルド後に「.resの削除」ステップを実行しようとすると、DelphiIDE/コンパイラが破損するように見えることに注意してください。IDEの外部でビルドする場合(msbuildを実行する前に常に特定の.resファイルを削除する)、これを外部で整理できますが、IDEの内部では、Delphiは多くの選択肢を提供しません。

誰かが解決策を持っていますか?(Delphi 2007でこの問題が発生していますが、2007からXE3までのすべてのバージョンのDelphiで機能するソリューションを歓迎します。)

4

1 に答える 1

2

以下のサンプルでは依存関係のチェックが行われていないため、これは完全な答えではありませんが、リソースが十分に頻繁に再構築されないという基本的な問題は、Always Rebuilding Every Time によって修正されます。これは十分です。

最終的には、(a) {$R foo.res foo.rc} 宣言を IDE 内で使用する場合に {$R foo.res foo.rc} 宣言からビルドする際に十分な頻度で再コンパイルしないことから、さらに悪い状態になることまで、Delphi の組み込みの動作よりも正確です。 (b) .dpr ファイルに {$R foo.res foo.rc} 宣言を含めると、コマンドラインからまったくビルドされません。

それで、これで、デビッドが私に提案したことを行う、実際のビルド前のステップがここにあります:

  call $(PROJECTDIR)\SubDir\foo.cmd $(PROJECTDIR)

これが私の foo.cmd に含まれるものです:

  cd %1\SubDir
  rc.exe foo.rc
  echo compiled foo RCDATA

foo.rc に何が含まれているのか疑問に思っている人にとっては、次のように見えるかもしれません:

  SQL_QUERY_1  RCDATA  "SqlDir1\MYSQL.SQL"

正誤表:

{$R foo.res foo.rc}IDE 内から Delphi 2007 でのみ適切にビルドされることがわかりました。コマンドライン MSBUILD から、ビルドされません。「DCC ERROR 1」が表示されるだけで、ビルドは実際のエラー メッセージなしで中止されます。Delphi MSBUILD のコンパイルが、エラー ログや stdout にエラーが出力されずに異常終了する理由の 1 つは、RC.exe がエラー レベルを返す場合です。RC.exe は実際のエラー メッセージを出力し (Delphi さん、無効なコマンド ライン パラメータを送ってくれました。諦めます)、DelphiDCC32がそれを転送しないか、何らかの形で飲み込まれて返されないかのいずれかです。これにより、ビルドが不可解に壊れる理由を知るのに十分な情報を得ることができます。厄介な小さな msbuild-dcc32 統合の誤機能、それ。

{$R subdir\foo.res subdir\foo.rc} の代わりに、これを DPR に含める必要があります。

  {$R SubDir\foo.res}

つまり、「そのバイナリ リソースをリンクし、再コンパイルしようとしないでください。既に行っているためです」。上記のすべては、David がコメントで提案したことを明示するためのものです。デビッドへの帽子のヒント。

于 2012-12-14T20:05:44.380 に答える