• 转:程序中得到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文件不会再生成了,所以这个方法对新版本不起作用。暂时还没有找解决方案

  • 相关阅读:
    python多进程(一)
    python操作memcached
    python操作redis
    SQLAlchemy总结
    SQLAlchemy-ORM
    python操作mysql二
    python操作mysql
    python正则二
    python正则
    python内置模块(三)
  • 原文地址:https://www.cnblogs.com/IvyCodingLife/p/3215062.html
Copyright © 2020-2023  润新知