在代码中嵌入图像构建时间

时间:2014-10-14 03:57:35

标签: c compilation

我们经常遇到在不同机器上运行不同C映像的问题。由于我们的代码仍处于生产阶段,因此我们会继续生成人们使用的二进制文件。通常很多时间花在调试上,以便稍后了解二进制文件是不正确的。

我想知道是否有一些机制可以在编译代码时打印日期和时间,然后我们可以使用它来确保所有二进制文件都是相同的。

有关如何在C中执行此操作的任何想法?我想打印这个图像以及版本号时的时间和日期。

2 个答案:

答案 0 :(得分:2)

__DATE____TIME__宏由编译器预定义,其中包含构建C程序的日期和时间。这些只是格式为"Mmm dd yyyy""hh:mm:ss"的字符串文字,因此应该易于与任何日志记录或打印系统一起使用。 (这些宏在C11标准第6.10.8.1节中定义)

答案 1 :(得分:2)

这称为版本控制:

首先,添加一个使用编译时字符串__DATE____TIME__的专用源文件。

例如:

printf("%s %s",__DATE__,__TIME__);

或者,如果您希望能够从这些字符串中提取信息:

char _date[] = __DATE__; // the format is "Jan  1 2000"
char _time[] = __TIME__; // the format is "00:00:00"
// Now use these variables to extract the data...

然后,确保无论何时更改项目中的任何文件,都将重新编译专用源文件。您通常可以在项目设置 pre-build 配置中应用此功能,方法是调用删除与专用源文件对应的目标文件的脚本。

例如,假设专用源文件的名称为version.c,目标文件的扩展名为obj,对象文件相对于项目的位置为{{1} }。

如果您通过Windows运行构建工具,则可以调用以下批处理文件:

debug\obj