Delphi预构建事件在编译之前未执行 [英] Delphi pre-build event not executing BEFORE compile

查看:248
本文介绍了Delphi预构建事件在编译之前未执行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

 调用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'} 

解决方案

尝试使用

  {$ 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆