如何在程序中得到SVN的版本号
http://www.linuxfans.org/nuke/modules.php?name=News&file=article&sid=3349    贴出者为 william.fu 编程开发 william.fu写著 '软件的版本号中有一部分是Build号,下面介绍如何在程序中使用SVN库中的版本好做为Build号的方法。


基本思路:源代码中使用GCC指定的宏,make的时候给GCC指定宏BUILDNUMBER,build脚本里面给makefile传递变量定义来定义一个宏.
给make传递变量定义的方法:make "VAR=value"
GCC中进行宏定义的方法:gcc -Dmacro=define
脚 本中获得SVN库的最新版本号的方法:svn up|grep revision|awk -F' ' '{ print $3 }'|awk -F'.' '{print $1}'。有时候svn up会输出很多信息,用grep 过滤掉其他信息,只处理包含版本号的那一行。
方法一:
build.sh :
svn_ver=`svn up|grep revision|awk -F' ' '{ print $3 }'|awk -F'.' '{print $1}'`
make "DEFINES=-DBUILDNUMBER=$svn_ver" all
makefile :
$(COMPILER) $(DEFINES) ...
ver.c :
...
printf("build version is:%d",BUILDNUMBER);
...

版本号是这样传递到源代码中的:build shell->makefile->gcc->source code
运行./build.sh,程序中将会得到最新的SVN的版本号。

同事想到更加直接方法:在build脚本里面直接将#define BUILDNUMBER +版本号输出到version.h中,这样程序中便可以直接使用BUILDNUMBER这个宏了。
方法二:
build.sh :
svn_ver=`svn up|grep revision|awk -F' ' '{ print $3 }'|awk -F'.' '{print $1}'`
echo "#define BUILDNUMBER $svn_ver" >version.h
make all

ver.c :
#include "version.h"
...
printf("build version is:%d",BUILDNUMBER);
...