Delphi预构建事件未执行BEFORE编译

Jac*_*ers 12 delphi delphi-2010 pre-build-event

我正忙着自动化我们的构建以包含svn修订版号.我们正在使用Delphi 2010.我添加了一个预构建事件,调用批处理文件,该文件将svn修订号(从.svn目录中的条目文件中读取)和指定的版本号注入到编译的aVersionInfo.rc中.我的项目.预构建事件如下所示:

call SetVersionInfo.bat 6 5 4
Run Code Online (Sandbox Code Playgroud)

...和批处理文件(希望有人发现这个有用)...

@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
Run Code Online (Sandbox Code Playgroud)

批处理文件确实作为编译的一部分执行,aVersionInfo.rc被更新,aVersionInfo.res被重新编译,但由于某种原因,新的res文件不用于编译exe.但是,它在干净的构建期间更新,或者如果我第二次编译.似乎在调用"pre"-build事件之前检查rc文件的更改.这实际上使它成为一个中期构建事件.或者我错过了什么?

我尝试删除aVersionInfo.res文件作为另一个预构建事件,但然后编译器抱怨此文件丢失.可能是那个

{$R 'aVersionInfo.res' 'aVersionInfo.rc'}
Run Code Online (Sandbox Code Playgroud)

线是在错误的地方?

Ond*_*lle 9

尝试使用

{$R aVersionInfo.res}
Run Code Online (Sandbox Code Playgroud)

brcc32 aVersionInfo.rc从批处理文件中手动调用(完成创建.rc文件后).这样,您的.res文件应该从正常的IDE构建中排除.