svn リビジョン番号を含めるようにビルドを自動化するのに忙しいです。Delphi 2010 を使用しています。svn リビジョン番号 (.svn ディレクトリのエントリ ファイルから読み取ったもの) と指定したバージョン番号を aVersionInfo.rc に挿入するバッチ ファイルを呼び出すビルド前イベントを追加しました。私のプロジェクト。ビルド前のイベントは次のようになります。
call SetVersionInfo.bat 6 5 4
...そしてバッチファイル(誰かがこれが役に立つといいのですが)...
@ECHO OFF
SETLOCAL
setLocal EnableDelayedExpansion
SET _myVar=0
FOR /F %%G in (.svn\entries.) DO (
IF !_myVar! LSS 3 SET /A _myVar+=1 & SET _svn_dir_rev=%%G
)
ECHO 1 VERSIONINFO > aVersionInfo.rc
ECHO. FILEVERSION %1,%2,%3,%_svn_dir_rev% >> aVersionInfo.rc
ECHO. PRODUCTVERSION 1 >> aVersionInfo.rc
ECHO. FILEOS VOS__WINDOWS32 >> aVersionInfo.rc
ECHO. FILETYPE VFT_APP >> aVersionInfo.rc
ECHO. BEGIN >> aVersionInfo.rc
ECHO. BLOCK "StringFileInfo" >> aVersionInfo.rc
ECHO. BEGIN >> aVersionInfo.rc
ECHO. BLOCK "080904b0" >> aVersionInfo.rc
ECHO. BEGIN >> aVersionInfo.rc
ECHO. VALUE "CompanyName","COMPANY\000" >> aVersionInfo.rc
ECHO. VALUE "FileDescription","APP\000" >> aVersionInfo.rc
ECHO. VALUE "FileVersion","%1.%2.%3.%_svn_dir_rev%\000" >> aVersionInfo.rc
ECHO. VALUE "InternalName","APP\000" >> aVersionInfo.rc
ECHO. VALUE "LegalCopyright","Copyright APP\000" >> aVersionInfo.rc
ECHO. VALUE "LegalTrademarks","APP\000" >> aVersionInfo.rc
ECHO. VALUE "OriginalFilename","APP.exe\000" >> aVersionInfo.rc
ECHO. VALUE "ProductName","APP\000" >> aVersionInfo.rc
ECHO. VALUE "ProductVersion,"1\000" >> aVersionInfo.rc
ECHO. VALUE "Comments","Compiled on %date% by %username%\000" >> aVersionInfo.rc
ECHO. END >> aVersionInfo.rc
ECHO. END >> aVersionInfo.rc
ECHO. BLOCK "VarFileInfo" >> aVersionInfo.rc
ECHO. BEGIN >> aVersionInfo.rc
ECHO. VALUE "Translation", 0x0809 1200 >> aVersionInfo.rc
ECHO. END >> aVersionInfo.rc
ECHO. END >> aVersionInfo.rc
ENDLOCAL
バッチ ファイルはコンパイルの一部として実行され、aVersionInfo.rc が更新され、aVersionInfo.res が再コンパイルされますが、何らかの理由で新しい res ファイルが exe のコンパイルに使用されません。ただし、クリーン ビルド時または 2 回目のコンパイル時に更新されます。「プレ」ビルドイベントが呼び出される前に、rcファイルへの変更のチェックが行われるようです。これにより、実際にはビルド中のイベントになります。または、何か不足していますか?
別のビルド前イベントとして aVersionInfo.res ファイルを削除しようとしましたが、コンパイラはこのファイルが見つからないと不平を言います。それは
{$R 'aVersionInfo.res' 'aVersionInfo.rc'}
ラインが間違った場所にありますか?