【问题标题】:Embed timestamp in object code at compile time with C++在编译时使用 C++ 在目标代码中嵌入时间戳
【发布时间】:2011-02-01 09:16:06
【问题描述】:

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

【问题讨论】:

标签: c++ build timestamp versioning


【解决方案1】:

您可以使用__DATE____TIME__

【讨论】:

  • @Inverse - 您可以修改构建过程以在每次编译时重新创建包含 __DATE____TIME__ 宏的文件。
  • 我所做的是将makefile编程为touch在编译之前包含宏的文件以强制其重建(理想情况下,包含宏的文件应该很少,如果有其他文件的话靠它。
【解决方案2】:

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

你想要__TIME__,可能还有__DATE__

【讨论】:

  • @einpoklum:C 有相同的宏列表,还有更多,但有一些细微差别。例如,__STDC__ 是“整数常量 1,用于指示符合要求的实现。”,而__cplusplus 从未定义。 C11 中的完整列表位于 §6.10.8.1。
【解决方案3】:

使用宏 __DATE____TIME__

【讨论】:

    【解决方案4】:

    如果您使用 gcc 预处理器,那么您将在 __TIME____DATE__ 宏中找到您要查找的内容

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

    __DATE__

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

    ...

    __TIME__

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

    【讨论】:

    • 只是指出:这与 GCC 无关。这是一个标准的东西。所以你是对的,宏就像你说的那样,但它不仅适用于 GCC。
    【解决方案5】:

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

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

    【讨论】:

      【解决方案6】:

      看起来编译器应该提供一个__TIMESTAMP__ 宏,它应该可以满足您的目的。

      【讨论】:

      • From MSDN: __TIMESTAMP__ 为您提供上次编辑 (!) 文件的日期和时间(不是编译时间)。
      【解决方案7】:

      我正在使用它向 DbgView 发送消息:

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

      【讨论】:

      • 只是对更好性能的提示:"附加版本:" __DATE__ " " __TIME__ 。也可以。
      猜你喜欢
      • 2011-03-04
      • 2021-02-19
      • 2010-11-24
      • 1970-01-01
      • 2010-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多