svn根据版本号取代码,svn获取指定版本代码
Tsvn附带一个命令行程序,subwcrev.exe。您可以对指定的文件执行一些宏替换,例如,用当前版本号替换WCREV。这是最有用的。
详见http://tortoisesvn.net/docs/nightly/tortoisesvn _ zh _ cn/tsvn-sub crev-keywords . html。
以vc6为例,文件的版本信息保存在rc文件中,编译成RES。
文件,然后将其与其他对象链接。现在的想法是。编辑rc文件并将版本号(如2.2.4.0)更改为2.2.4。$WCREV$。每次
在链接之前,首先使用subwcrev.exe处理rc文件并替换宏。然后调用rc.exe编译替换的新文件。生成res后,一起
链接。修改rc文件的versioninfo部分,如下所示:
# ifdef _自动版本
文件版本2,2,4,$WCREV$
产品版本2,2,4,$WCREV$
#否则
文件版本2,2,4,0
产品版本2,2,4,0
#endif
…
# ifdef _自动版本
值文件版本, 2,2,4,$WCREV$
值产品版本, 2,2,4,$WCREV$
#否则
值文件版本, 2,2,4,0
值产品版本, 2,2,4,0
#endif
事实上,添加了条件编译。默认情况下,它是未定义的
_AUTOVERSION,使用原始文件版本productversion。如果定义了_AUTOVERSION,
使用新版本信息。
在项目属性中找到预链接页面。添加:
subwcrevsubwcrev.exe。myprogram.rc myprogram.rc_
rc.exe/l 0804/fo release my program . RES /d _ AUTOVERSION /d _ afx dll
myprogram.rc_
第一个命令处理myprogram.rc以生成myprogram.rc_
第二个命令将myprogram.rc_编译为myprogram.res,注意它的路径。这里是发布版本的默认路径。
原理是这里生成的res替换原来的res文件。
按f7,构建。现在版本信息已经刷新。该版本将在每次提交给svn时更新。
但是我们可以更进一步。写版本信息,编译时间等。进入“关于”对话框。
其实关键是预链接。用以下内容创建一个文件buildtime.cpp:
const char * szBuildTime= Build on $ WC now $ ;
const char * szFullVersion= my program
2.2.4.$WCREV$$WCMODS?$$WCMIXED?#:$;在OnInitDialog()的“关于”对话框中,添加:
extern const char * szBuildTime
extern const char * szFullVersion
SetDlgItemText(IDC_BUILDTIME,szBuildTime);
SetDlgItemText(IDC_VERSION,szFullVersion);在预链接中再添加两个项目:
subwcrevsubwcrev.exe。buildtime.cpp buildtime_。卡片打印处理机(Card Print Processor的缩写)
cl/c/no logo/forelesabuildtime . obj/MT build time _。卡片打印处理机(Card Print Processor的缩写)
原理和rc文件一样。先替换,再编译。还要确保生成的
Build.obj覆盖原始的buildtime.obj
你完了。
但是,需要注意的是,每次编辑资源时,都会重新生成. vc6的资源编辑器。
Rc文件。也就是说会删除我们对rc的修改。目前还没有找到好的解决方案,现在只需要在每次资源编辑后手动添加条件编译部分。建议在项目中输入beta。
然后添加版本信息。因为这个时候节目的资源一般不会变。另外,这里虽然以vc6为例,但也可以应用于vc2003。
vc2005等编译环境。
后记:也可以考虑用程序自动修改。查找文件版本,
用FILEVERSION 2,2,4,$WCREV$替换后面的版本,再用subwcrev替换,然后用rc编译。这个还不需要定义。
_AUTOVERSION宏。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。