转:程序中得到SVN的版本号

BuildNumber: 在程序中得到SVN的版本号

基本思路:源代码中使用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这个宏了。

方法二:
shell script文件:    build.sh

svn_ver=`svn up|grep revision|awk -F' ' '{ print $3 }'|awk -F'.' '{print $1}'`
echo "/* This is generate by the build.sh script, don't Edit it by hand */" > version.h
echo "#define MAJOR 2" >>version.h
echo "#define MINOR 0" >>version.h
echo "#define REVER 0" >>version.h
echo "#define BUILDNUMBER $svn_ver" >>version.h
make

source code文件: test.c
#include "version.h"
int main(int argc, char **argv)
{
   printf("Software version is: "%d.%d.%d Build %04d", MAJOR, MINOR, REVER,BUILDNUMBER);
   return 0;

}

 

方法三:

Makefile文件中自动创建version.h头文件,获取SVN的方法最好使用这里的sed脚本

all: entry version binary

    @rm -f *.elf*

    @rm -f *.gdb

    @cp ${APP_BINARY_NAME}  ${APP_BINARY_NAME}_svn${SVNVER}_$(ARCH)

    @make install

version:

    @echo "/* Generated by makefile, don't Edit it by hand */" > version.h

    @echo "#define MAJOR ${MAJOR}" >>version.h

    @echo "#define MINOR ${MINOR}" >>version.h

    @echo "#define REVER ${REVER}" >>version.h

    @if [ -f .svn/entries ] ; then

        echo "#define SVNVER `sed -n -e 11p .svn/entries`" >>version.h;

    else

        echo "#define SVNVER 0" >>version.h;

    fi;

在SVN VERSION = 1.7.5 .svn/entries文件不会再生成了,所以这个方法对新版本不起作用。暂时还没有找解决方案

原文地址:https://www.cnblogs.com/IvyCodingLife/p/3215062.html