我忙於自動構建包含svn修訂版編號。我們使用的是Delphi 2010.我添加了一個預生成事件,調用一個批處理文件,將svn修訂版號(從.svn目錄中的條目文件中讀取)和指定的版本號注入到aVersionInfo.rc中,我的項目。預生成事件看起來是這樣的:Delphi預編譯事件不會在執行之前編譯
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。然而,它是在一個乾淨的構建過程中更新的,或者是我第二次編譯的。似乎在調用「pre」生成事件之前檢查對rc文件的更改。這實際上使它成爲中期製作活動。或者我錯過了什麼?
我曾嘗試刪除aVersionInfo.res文件作爲另一個預生成事件,但編譯器抱怨此文件丟失。難道是
{$R 'aVersionInfo.res' 'aVersionInfo.rc'}
行是在錯誤的地方?
感謝,作品像一個魅力 – 2010-01-19 07:46:27