整个程序中__TIME__的常数

时间:2019-02-13 11:16:58

标签: c time macros c-preprocessor

如果我有一个包含多个C源文件的C程序,每个C源文件都使用预处理器指令__DATE____TIME__,那么有什么方法可以确保每个值始终相同当前程序中的实例?

我尝试使用带有#define FIXED_TIME __TIME__的头文件,希望只进行一次评估,但是我错了。如果编译时间超过1秒,则C文件中的时间将有所不同。

在多个文件中使用时,有什么方法可以确保__DATE____TIME__相同吗?还是我必须在我的Makefile中手动构建日期和时间字符串并手动定义它们?

1 个答案:

答案 0 :(得分:4)

这是a bit XY,但我认为类似这样的事情确实属于构建基础架构,因为您需要的是构建本身的一些不变ID。

对于简单的小型项目,我会考虑添加类似的内容

MAKE_TIME = $(date --iso-8601)
CFLAGS += -DBUILD_TIME=$(MAKE_TIME)

Makefile中的内容。如果您的项目中有很多文件,而您只是重新构建了其中的几个文件,那么这当然仍然会中断,然后它们将以BUILD_TIME的不同值进行编译。

一种解决方案是将实际代码中需要时间的位置集中到例如一个函数,仅在其中使用BUILD_TIME。然后,整个程序的行为就好像是在构建定义该功能的文件时生成的那样,至少会更好。