C/C++软件版本号设置和获取,加入编译时间

C/C++软件版本号设置和获取,加入编译时间

在嵌入式开发过程中,经常使用C/C++编程,针对软件的管理可以使用git等等优秀的版本管理

但是有时候也会对发布的可执行固件、软件进行版本号获取,这里提供一种方便的设置和获取软件版本

具体如下说明:

获取的版本号信息类似如下格式,1.0为你要设置的版本号,后面为该版本的编译时间

1.0-V-2013-05-09T15:34:49

使用代码下载连接

C/C++软件版本号设置和获取,加入编译时间-嵌入式文档类资源-CSDN文库

具体实现过程如下所示

版本号宏定义设置

C/C++软件版本号设置和获取,加入编译时间_第1张图片

获取软件编译时间日期

C/C++软件版本号设置和获取,加入编译时间_第2张图片

实际使用举例过程如下代码所示:

#include "version_num.h"

#include "build_defs.h"

// want something like: 1.4.1432.2234
const unsigned char completeVersion[] =
{
    VERSION_MAJOR_INIT,
    '.',
    VERSION_MINOR_INIT,
    '-', 'V', '-',
    BUILD_YEAR_CH0, BUILD_YEAR_CH1, BUILD_YEAR_CH2, BUILD_YEAR_CH3,
    '-',
    BUILD_MONTH_CH0, BUILD_MONTH_CH1,
    '-',
    BUILD_DAY_CH0, BUILD_DAY_CH1,
    'T',
    BUILD_HOUR_CH0, BUILD_HOUR_CH1,
    ':',
    BUILD_MIN_CH0, BUILD_MIN_CH1,
    ':',
    BUILD_SEC_CH0, BUILD_SEC_CH1,
    '\0'
};
int main(int argc, char* const argv[])
{
    //版本控制
    // prints something similar to: 1.0-V-2013-05-09T15:34:49
    printf("\n\version info: %s\n", completeVersion);


}

设置的代码如下

version_num.h文件代码如下:

// source file version_num.h



#ifndef VERSION_NUM_H



#define VERSION_NUM_H





#define VERSION_MAJOR 1

#define VERSION_MINOR 0





#endif // VERSION_NUM_H

build_defs.h文件代码如下

// source file build_defs.h



#ifndef BUILD_DEFS_H



#define BUILD_DEFS_H





// Example of __DATE__ string: "Jul 27 2012"

//                              01234567890



#define BUILD_YEAR_CH0 (__DATE__[ 7])

#define BUILD_YEAR_CH1 (__DATE__[ 8])

#define BUILD_YEAR_CH2 (__DATE__[ 9])

#define BUILD_YEAR_CH3 (__DATE__[10])





#define BUILD_MONTH_IS_JAN (__DATE__[0] == 'J' && __DATE__[1] == 'a' && __DATE__[2] == 'n')

#define BUILD_MONTH_IS_FEB (__DATE__[0] == 'F')

#define BUILD_MONTH_IS_MAR (__DATE__[0] == 'M' && __DATE__[1] == 'a' && __DATE__[2] == 'r')

#define BUILD_MONTH_IS_APR (__DATE__[0] == 'A' && __DATE__[1] == 'p')

#define BUILD_MONTH_IS_MAY (__DATE__[0] == 'M' && __DATE__[1] == 'a' && __DATE__[2] == 'y')

#define BUILD_MONTH_IS_JUN (__DATE__[0] == 'J' && __DATE__[1] == 'u' && __DATE__[2] == 'n')

#define BUILD_MONTH_IS_JUL (__DATE__[0] == 'J' && __DATE__[1] == 'u' && __DATE__[2] == 'l')

#define BUILD_MONTH_IS_AUG (__DATE__[0] == 'A' && __DATE__[1] == 'u')

#define BUILD_MONTH_IS_SEP (__DATE__[0] == 'S')

#define BUILD_MONTH_IS_OCT (__DATE__[0] == 'O')

#define BUILD_MONTH_IS_NOV (__DATE__[0] == 'N')

#define BUILD_MONTH_IS_DEC (__DATE__[0] == 'D')





#define BUILD_MONTH_CH0 \

    ((BUILD_MONTH_IS_OCT || BUILD_MONTH_IS_NOV || BUILD_MONTH_IS_DEC) ? '1' : '0')



#define BUILD_MONTH_CH1 \

    ( \

        (BUILD_MONTH_IS_JAN) ? '1' : \

        (BUILD_MONTH_IS_FEB) ? '2' : \

        (BUILD_MONTH_IS_MAR) ? '3' : \

        (BUILD_MONTH_IS_APR) ? '4' : \

        (BUILD_MONTH_IS_MAY) ? '5' : \

        (BUILD_MONTH_IS_JUN) ? '6' : \

        (BUILD_MONTH_IS_JUL) ? '7' : \

        (BUILD_MONTH_IS_AUG) ? '8' : \

        (BUILD_MONTH_IS_SEP) ? '9' : \

        (BUILD_MONTH_IS_OCT) ? '0' : \

        (BUILD_MONTH_IS_NOV) ? '1' : \

        (BUILD_MONTH_IS_DEC) ? '2' : \

        /* error default */    '?' \

    )



#define BUILD_DAY_CH0 ((__DATE__[4] >= '0') ? (__DATE__[4]) : '0')

#define BUILD_DAY_CH1 (__DATE__[ 5])







// Example of __TIME__ string: "21:06:19"

//                              01234567



#define BUILD_HOUR_CH0 (__TIME__[0])

#define BUILD_HOUR_CH1 (__TIME__[1])



#define BUILD_MIN_CH0 (__TIME__[3])

#define BUILD_MIN_CH1 (__TIME__[4])



#define BUILD_SEC_CH0 (__TIME__[6])

#define BUILD_SEC_CH1 (__TIME__[7])





#if VERSION_MAJOR > 100



#define VERSION_MAJOR_INIT \

    ((VERSION_MAJOR / 100) + '0'), \

    (((VERSION_MAJOR % 100) / 10) + '0'), \

    ((VERSION_MAJOR % 10) + '0')



#elif VERSION_MAJOR > 10



#define VERSION_MAJOR_INIT \

    ((VERSION_MAJOR / 10) + '0'), \

    ((VERSION_MAJOR % 10) + '0')



#else



#define VERSION_MAJOR_INIT \

    (VERSION_MAJOR + '0')



#endif



#if VERSION_MINOR > 100



#define VERSION_MINOR_INIT \

    ((VERSION_MINOR / 100) + '0'), \

    (((VERSION_MINOR % 100) / 10) + '0'), \

    ((VERSION_MINOR % 10) + '0')



#elif VERSION_MINOR > 10



#define VERSION_MINOR_INIT \

    ((VERSION_MINOR / 10) + '0'), \

    ((VERSION_MINOR % 10) + '0')



#else



#define VERSION_MINOR_INIT \

    (VERSION_MINOR + '0')



#endif







#endif // BUILD_DEFS_H

你可能感兴趣的:(嵌入式系统,C,C++,软件版本号设置,编译时间,版本号添加编译时间)