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

w8f9ii69  于 2023-05-30  发布在  其他
关注(0)|答案(8)|浏览(421)

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

93ze6v8z

93ze6v8z1#

可以使用__DATE____TIME__

fxnxkyjh

fxnxkyjh2#

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

wd2eg0qa

wd2eg0qa3#

使用宏__DATE____TIME__

hpxqektj

hpxqektj4#

如果您使用的是gcc预处理器,那么您可以在__TIME____DATE__宏中找到所需的内容。
引用自GNU C预处理器文档:
日期
此宏扩展为一个字符串常量,用于描述预处理器运行的日期。字符串常量包含11个字符,看起来像“Feb 12 1996”。如果一个月中的某一天小于10,则在左侧填充一个空格。
...
时间
此宏扩展为一个字符串常量,用于描述预处理器的运行时间。字符串常量包含八个字符,看起来像“23:59:01”。

anauzrmj

anauzrmj5#

使用脚本或创建应用程序来生成包含构建日期和时间的C++源文件。将此文件添加到生成设置中。程序的其他部分可以引用此文件中的数据。
这种技术对于在程序中嵌入版本号也很有用。构建过程可以控制版本号。

fjaof16o

fjaof16o6#

看起来编译器应该提供一个__TIMESTAMP__宏,它应该能满足您的需要。

dohp0rv5

dohp0rv57#

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

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

6yt4nkrj8#

您可以将以下字符串添加到CMakeLists.txt字符串(TIMESTAMP COMPILE_TIME %Y%m%d-%H%M%S)

你需要添加下面的字符串到你的“ProjectName.h.in“文件#define TIMESTAMP @COMPILE_TIME@
那么当你编译你的项目时,下面的字符串将被写入你的“ProjectName. h”

define TIMESTAMP 20230220-203532

相关问题