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;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值