如果我有一个包含多个C源文件的C程序,每个C源文件都使用预处理器指令__DATE__
和__TIME__
,那么有什么方法可以确保每个值始终相同当前程序中的实例?
我尝试使用带有#define FIXED_TIME __TIME__
的头文件,希望只进行一次评估,但是我错了。如果编译时间超过1秒,则C文件中的时间将有所不同。
在多个文件中使用时,有什么方法可以确保__DATE__
和__TIME__
相同吗?还是我必须在我的Makefile中手动构建日期和时间字符串并手动定义它们?
答案 0 :(得分:4)
这是a bit XY,但我认为类似这样的事情确实属于构建基础架构,因为您需要的是构建本身的一些不变ID。
对于简单的小型项目,我会考虑添加类似的内容
MAKE_TIME = $(date --iso-8601)
CFLAGS += -DBUILD_TIME=$(MAKE_TIME)
或Makefile
中的内容。如果您的项目中有很多文件,而您只是重新构建了其中的几个文件,那么这当然仍然会中断,然后它们将以BUILD_TIME
的不同值进行编译。
一种解决方案是将实际代码中需要时间的位置集中到例如一个函数,仅在其中使用BUILD_TIME
。然后,整个程序的行为就好像是在构建定义该功能的文件时生成的那样,至少会更好。