如何获取程序的编译时间

Posted 明日的世界

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何获取程序的编译时间相关的知识,希望对你有一定的参考价值。

有两个宏可以获取获取编译的时间

__DATA__:编译的日期

__TIME__:编译的时间

可以通过打印来看编译的日期和时间:

printf("data: %s     time: %s",__DATA__,__TIME__);

 

有时需要将编译的时间放入版本号中,方法如下:

 

#include "stdlib.h"

#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])



#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])


uint8_t year[5] = {‘\0‘};
uint8_t mon[3]  = {‘\0‘};
uint8_t day[3]  = {‘\0‘};

uint8_t firmware_year = 0;
uint8_t firmware_mon  = 0;
uint8_t firmware_day  = 0;

void time_convert(void)
{
    year[0] = BUILD_YEAR_CH2;
    year[1] = BUILD_YEAR_CH3;

    mon[0]  = BUILD_MONTH_CH0;
    mon[1]  = BUILD_MONTH_CH1;

    day[0]  = BUILD_DAY_CH0;
    day[1]  = BUILD_DAY_CH1;

 

    //将字符串转换成整形
    firmware_year = atoi(year);
    firmware_mon  = atoi(mon);
    firmware_day  = atoi(day);
}

以上是关于如何获取程序的编译时间的主要内容,如果未能解决你的问题,请参考以下文章

如何交叉编译我的 Linux 应用程序以在 Linux 中获取 Windows 可执行文件?

代码中,使用__DATE__宏,获取程序编译时间,如何保证每次编译代码(非重新生成方式),都能更新__DATE__的值?

如何将 Elastic Beanstalk 获取到服务器编译的资产?

如何以编程方式获取 linux 内核页面大小

如何将 tsconfig.json 文件添加到 Visual Studio 2015 项目以获取编译器选项?

如何编译 jrxml 以获取 jasper?