Linux下C/C++版本发布自动脚本

来源:互联网 发布:怎么开启数据网络 编辑:程序博客网 时间:2024/05/22 13:15
软件发布有软件版本管理原则,这里结合Linux下C/C++项目发布方式,简单介绍一下如何自动的集成动态版本管理脚本。

软件版本发布关键点

从软件版本管理原则我们需要注意的是以下几个关键点:

==》主版本(VER_MAJOR):项目(产品)负责人维护
==》次版本(VER_MINOR):技术(版本)接口人维护
==》版本号(VER_REVISION):代码库自动升级更新
==》编译日期(BUILD_DATE):编译机器的系统日期
==》编译时间(BUILD_TIME):编译机器的系统时间
==》编译标识(BUILD_ID):编译唯一码
==》编译人员(AUTHOR_NAME):编译发布人员

==》联系方式(AUTHOR_CONTACT):编译发布人员联系方式


动态版本管理脚本

==》支持主版本、次版本、联系方式自定义

==》支持发布人员或者发布账户自定义

==》支持版本号、编译日期、编译时间动态获取

==》自动生成version.c/version.h(version.h用于函数原型定义,直接在应用中include即可。)

#!/bin/bash# parameter checkif [ $# -ne 4 ] && [ $# -ne 5 ]then    echo "usage($#): $0 major_num minor_num DEBUG/RELEASE e-mail author"echo "       or: $0 major_num minor_num DEBUG/RELEASE e-mail"    exitfi# functionversion(){BUILD_DATE=`date "+%Y-%m-%d"`BUILD_TIME=`date "+%R:%S"`VERSION_NUM=`svn info|grep Revision |cut --delimiter=" " -f2`cat > version.c <<EEEEEEE#include "stdio.h"#include "version.h"#define VER_MAJOR $1#define VER_MINOR $2#define VER_REVISION $VERSION_NUM#define VER_DR_FLAG "$3"#define VER_BUILD_DATE "$BUILD_DATE"#define VER_BUILD_TIME "$BUILD_TIME"#define AUTHOR_CONTACT "$4"#define AUTHOR_NAME    "$5"#define VERSION_ALL  "$3_${BUILD_DATE}_${BUILD_TIME}_v$1_$2_$VERSION_NUM"char *get_version(){return VERSION_ALL;}char *get_ver_author(){return AUTHOR_NAME;}char *get_ver_author_contact(){return AUTHOR_CONTACT;}char *get_ver_flag(){return VER_DR_FLAG;}char *get_build_date(){return VER_BUILD_DATE;}char *get_build_time(){return VER_BUILD_TIME;}int get_ver_major(){return VER_MAJOR;}int get_ver_minor(){return VER_MINOR;}int get_ver_rev(){return VER_REVISION;}EEEEEEEcat > version.h <<EEEEEEE#ifndef __VERSION_H__ #define __VERSION_H__ char *get_version();char *get_ver_author();char *get_ver_author_contact();char *get_ver_flag();char *get_build_date();char *get_build_time();int get_ver_major();int get_ver_minor();int get_ver_rev();#endif /* __VERSION_H__ */EEEEEEE}# printecho "###############################"echo "######### $0 "echo "######### Major Number: $1"echo "######### Minor Number: $2"echo "######### D/R Flag: $3"echo "######### Contact: $4"if [ $# -eq 4 ]thenAUTHOR=`who | cut --delimiter=" " -f1`elseAUTHOR=$5fiecho "######### Author: $AUTHOR"version $1 $2 $3 $4 $AUTHORif [ $? -eq 0 ]then    echo "######### Done! "else"######### Failed! "fiecho "###############################"

动态生成的版本代码

在SVN版本库根目录执行

# ./version.sh 1 2 DEBUG lida@palfocus.com lida######################################## ../version.sh######### Major Number: 1######### Minor Number: 2######### D/R Flag: DEBUG######### Contact: lida@palfocus.com######### Author: lida######### Done!###############################


version.c

#include "stdio.h"#include "version.h"#define VER_MAJOR 1#define VER_MINOR 2#define VER_REVISION 271#define VER_DR_FLAG "DEBUG"#define VER_BUILD_DATE "2016-05-10"#define VER_BUILD_TIME "18:29:35"#define AUTHOR_CONTACT "lida@palfocus.com"#define AUTHOR_NAME    "lida"#define VERSION_ALL  "DEBUG_2016-05-10_18:29:35_v1_2_271"char *get_version(){return VERSION_ALL;}char *get_ver_author(){return AUTHOR_NAME;}char *get_ver_author_contact(){return AUTHOR_CONTACT;}char *get_ver_flag(){return VER_DR_FLAG;}char *get_build_date(){return VER_BUILD_DATE;}char *get_build_time(){return VER_BUILD_TIME;}int get_ver_major(){return VER_MAJOR;}int get_ver_minor(){return VER_MINOR;}int get_ver_rev(){return VER_REVISION;}

version.h

#ifndef __VERSION_H__ #define __VERSION_H__ char *get_version();char *get_ver_author();char *get_ver_author_contact();char *get_ver_flag();char *get_build_date();char *get_build_time();int get_ver_major();int get_ver_minor();int get_ver_rev();#endif /* __VERSION_H__ */

DEMO示例集成版本管理

main.c

#include <stdio.h>#include "version.h"void main(){printf("get_version: %s\n",get_version());printf("get_ver_author: %s\n",get_ver_author());printf("get_ver_author_contact: %s\n",get_ver_author_contact());printf("get_ver_flag: %s\n",get_ver_flag());printf("get_build_date: %s\n",get_build_date());printf("get_build_time: %s\n",get_build_time());printf("get_ver_major: %d\n",get_ver_major());printf("get_ver_minor: %d\n",get_ver_minor());printf("get_ver_rev: %d\n",get_ver_rev());}

编译、执行上述version和main程序

# gcc main.c version.c# ./a.outget_version: DEBUG_2016-05-10_18:29:35_v1_2_271get_ver_author: lidaget_ver_author_contact: lida@palfocus.comget_ver_flag: DEBUGget_build_date: 2016-05-10get_build_time: 18:29:35get_ver_major: 1get_ver_minor: 2get_ver_rev: 271








原创粉丝点击