2012-12-13 3 views
6

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

SAMPLE RCDATA "File.txt" 

TEST.RCは、再コンパイルの原因となりますよう、変更された場合には、「FILE.TXTが」修飾されたとき、しかし、Delphiは上、リソースを再コンパイルしない:ここでは

は、サンプルTEST.RCファイルです"コンパイル"。私は時間を数秒から数分に増やすので、単に「ビルド」を使用するつもりはありません。

デルファイは.RCのテキストファイルと依存関係を正しく動作させることができましたか?リソースを追加して変更する人はいませんが、.RCファイルのRCDATAセクションにあるバイナリやテキストデータなど、しばしば変更される可能性のあるものに対して.RCファイルを使用し始めました。

プレビルドまたはビルド後に「delete .res」ステップを実行しようとすると、Delphi IDE /コンパイラが壊れることがあります。私はIDEの外にビルドするときにこれを外部に並べ替えることができます(msbuildを実行する前に特定の.resファイルを常に削除します)。しかし、IDEの中では、Delphiはあまり選択肢を与えません。

解決方法はありますか? (私はDelphi 2007でこの問題を抱えていますが、2007年からXE3までのDelphiの任意のバージョンで動作するソリューションはすべて歓迎されます)

+0

コマンドラインインタープリタを起動しようとしましたか? cmd.exe/c "del * .res"のようなもの – jachguate

+1

私はいつもプリビルドスクリプト –

+1

でリソースをコンパイルします。 'del'は動作しません(これはdelphi IDEコンパイラと混同します)が、' touch foo.rc'はあらかじめ-buildイベントは機能します。私はプリビルドで "rc.exe"コマンドを実行することも完璧だと思います。 –

答えて

2

これは完全な答えではありません。サンプルの下にありますが、頻繁に再構築されないリソースの基本的な問題は、毎回常に再構築することによって解決されます。これは十分です。

最終的には、(a)IDE内で{$ R foo.res foo.rc}宣言を使用してビルドしているときに、 .dprファイルに{$ R foo.res foo.rc}宣言を含めると、(b)コマンドラインからのビルドがまったく悪い状態になります。だから、

、すべてのことで、ここでダビデは私が提案し何を作業前のビルドステップ、です:

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" 

ERRATA:

{$R foo.res foo.rc}は、IDE内からDelphi 2007で正しくビルドされていることがわかりました。 MSBUILDコマンドラインから、ビルドされません。 "DCC ERROR 1" が表示され、実際のエラーメッセージが表示されずにビルドが中止されます。デルファイMSBUILDがエラーログまたはstdoutにエラー出力なしで不思議にコンパイルする理由の1つは、RC.exeがエラーレベルを返すことです。 RC.exeは本当のエラーメッセージを出力します(Hey Delphiが私に無効なコマンドラインパラメータを送信しました、私は諦めています)、Delphi DCC32はそれをあなたに送り返しません。ユーザーに戻って、なぜ彼らのビルドが神秘的に壊れているのかを知るのに十分な情報を得ることができます。厄介な小さなmsbuild - dcc32の統合ミスフィーチャ、それ。代わりの

{$ Rサブディレクトリ\ foo.res SUBDIR \ foo.rc}、あなたはDPRでこれを持っている必要があります。「バイナリリソースを再コンパイルしようとしないというリンクを意味

{$R SubDir\foo.res} 

私たちはすでにそれをやったから "上記のすべては、Davidがコメントで示唆したことを明確にするためのものです。ダビデの帽子。

+0

+1 ERRATA info –

関連する問題