Delphi预构建事件在编译之前未执行 [英] Delphi pre-build event not executing BEFORE compile
问题描述
调用SetVersionInfo.bat 6 5 4
...和批处理文件(希望有人认为这有用)...
@ECHO OFF
SETLOCAL
setLocal EnableDelayedExpansion
SET _myVar = 0
FOR / F %% G in(.svn (
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。 BLOCKStringFileInfo>> aVersionInfo.rc
ECHO。 BEGIN>> aVersionInfo.rc
ECHO。 BLOCK080904b0>> aVersionInfo.rc
ECHO BEGIN>> aVersionInfo.rc
ECHO。 VALUECompanyName,COMPANY\000>> aVersionInfo.rc
ECHO。 VALUEFileDescription,APP\000>> aVersionInfo.rc
ECHO。 VALUEFileVersion,%1.%2.%3。%_ svn_dir_rev%\000>> aVersionInfo.rc
ECHO。 VALUEInternalName,APP\000>> aVersionInfo.rc
ECHO。 VALUELegalCopyright,版权APP\000>> aVersionInfo.rc
ECHO。 VALUELegalTrademarks,APP\000>> aVersionInfo.rc
ECHO。 OriginalFilename,APP.exe\000>> aVersionInfo.rc
ECHO。 VALUEProductName,APP\000>> aVersionInfo.rc
ECHO。 VALUEProductVersion,1\000>> aVersionInfo.rc
ECHO。评论,编译%%%%%%%\000>> aVersionInfo.rc
ECHO。END>> aVersionInfo.rc
ECHO。END>> aVersionInfo.rc
ECHO。BLOCKVarFileInfo>> aVersionInfo.rc
ECHO。 BEGIN>>> aVersionInfo.rc
ECHO。VALUE翻译,0x0809 1200>> aVersionInfo.rc
ECHO。END>> aVersionInfo.rc
ECHO。END> ;> aVersionInfo.rc
ENDLOCAL
批处理文件作为编译的一部分执行,aVersionInfo.rc被更新,aVersionInfo.res被重新编译,但是由于某些原因,新的res文件不用于编译exe,但是在清理生成期间或者如果我第二次编译时,它是更新的,似乎检查rc文件的更改是在pre-build事件被调用之前发生的,哪些实际上使它成为一个中间构建事件,还是我缺少一些东西?
我尝试删除aVersionInfo.res文件作为另一个预构建事件,但是编译器抱怨说该文件丢失。可能是
{$ R'aVersionInfo.res''aVersionInfo.rc'}
$行在错误的地方?c $ c>
尝试使用
{$ R aVersionInfo.res}
并调用 brcc32 aVersionInfo.rc
从您的批处理文件手动(完成创建.rc文件之后)。这样你的.res文件应该从正常的IDE构建中排除。
I'm busy automating our builds to include the svn revision number. We're using Delphi 2010. I added a pre-build event calling a batch file that injects the the svn revision number (read from the entries file in the .svn directory) and a specified version number into aVersionInfo.rc that is compiled with my project. The pre-build event looks like this:
call SetVersionInfo.bat 6 5 4
...and the batch file (hope someone finds this useful)...
@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
The batch file does execute as part of a compile, aVersionInfo.rc is updated, aVersionInfo.res is recompiled, but for some reason the new res file is not used to compile the exe. It is, however, updated during a clean build or if I compile a second time. It seems the check for changes to the rc files takes place before the "pre"-build events are called. Which actually makes it a mid-build event. Or am I missing something?
I did try deleting the aVersionInfo.res file as another pre-build event, but then the compiler complains that this file is missing. Could it be that the
{$R 'aVersionInfo.res' 'aVersionInfo.rc'}
line is in the wrong place?
Try using
{$R aVersionInfo.res}
and calling brcc32 aVersionInfo.rc
manually from your batch file (after you're done with creating the .rc file). That way your .res file should be excluded from the normal IDE build.
这篇关于Delphi预构建事件在编译之前未执行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!