使用C ++在编译时将时间戳嵌入目标代码中

时间:2010-03-26 21:40:36

标签: c++ build timestamp versioning

我想执行一个printf()来显示上次编译当前正在执行的代码的时间。 C / C ++是否提供了一个宏,可以让您在编译期间解析为时间戳?

7 个答案:

答案 0 :(得分:29)

您可以使用__DATE____TIME__

答案 1 :(得分:23)

  

16.8预定义的宏名称[cpp.predefined]
  1以下宏名称应由实施定义:
  __LINE__当前源行的行号(十进制常量)   __FILE__源文件的假定名称(字符串文字)   __DATE__源文件的转换日期(“Mmm dd yyyy”形式的字符串文字,其中月份的名称与asctime函数生成的相同,以及dd的第一个字符如果值小于10,则为空格字符。如果没有翻译日期,则提供实施定义的有效日期   __TIME__源文件的转换时间(形式为“hh:mm:ss”的字符串文字,如asctime函数生成的时间)。如果翻译时间不可用,则提供实施定义的有效时间   __STDC__ __STDC__是否已预先定义,如果是,它的值是什么,是实现定义的   __cplusplus编译C ++时,名称__cplusplus被定义为值199711L   翻译单位。

您想__TIME__,可能__DATE__

答案 2 :(得分:6)

使用宏__DATE____TIME__

答案 3 :(得分:4)

如果您使用的是gcc预处理器,那么您可以在__TIME____DATE__宏中找到所需内容

来自GNU C预处理器documentation的引言:

  

__ DATE __

     

此宏扩展为一个字符串常量,该常量描述预处理器运行的日期。字符串常量包含11个字符,看起来像“1996年2月12日”。如果当月的日期小于10,则在左侧填充空格。

     

...

     

__ TIME __

     

此宏扩展为一个字符串常量,该常量描述预处理器的运行时间。字符串常量包含八个字符,看起来像“23:59:01”。

答案 4 :(得分:2)

使用脚本或创建应用程序来生成包含构建日期和时间的C ++源文件。将此文件添加到构建设置。程序的其他部分可以引用此文件中的数据。

此技术对于将版本号嵌入程序也很有用。构建过程可以控制版本号。

答案 5 :(得分:0)

看起来编译器应该提供一个__TIMESTAMP__宏,它应该适用于您的目的。

答案 6 :(得分:0)

我使用它向DbgView发送消息:

    OutputDebugStringA(("ATTACHED VERSION: "+ string(__DATE__) + " " + string(__TIME__)).c_str());