Hab*_*med 5 c++ compiler-construction macros time date
使用c ++
我在自动计划中编译我的代码,需要使用代码本身编译代码的时间.目前,我只是使用__DATE__,__TIME__宏来获得编译时的日期和时间.然而,这将导致二进制文件即使没有更改已对源所做的更改(宏将在编译时膨胀),这是不好的(我不想安装认为改变二元如果没有任何变化来源).
是否有可能在不使用会导致源更改的任何方法的情况下获得编译时间?
谢谢
标准__DATE__和__TIME__宏执行您观察到的操作,返回一个与时间相关的字符串。
它取决于系统(也许还有编译器),特别是构建系统(例如 GNU make)。
一个可能的想法是链接到一个单独的时间戳文件中,类似于(make语法)
timestamp.c:
date +'const char timestamp[]="%c";' > $@
program: $(OBJECTS) timestamp.c
$(LINKER.cc) $^ -o $@ $(LIBES)
rm -f timestamp.c
Run Code Online (Sandbox Code Playgroud)
然后将timestamp.o重新生成,并且program每次都会重新链接make(因此生成的程序确实会改变,但大多数代码 - 通过$(OBJECTS)make 变量 - 将保持不变)。
或者,您可以在某些数据库或文本日志文件中记录链接时间,例如
program: $(OBJECTS)
$(LINKER.cc) $^ -o $@ $(LIBES)
date +'$@ built at %c' >> /var/log/build.log
Run Code Online (Sandbox Code Playgroud)
(您可以使用logger而不是date将其记录在系统日志中)
然后生成的内容program不会改变,但您将在某处记录构建时间戳。顺便说一句,您还可以记录二进制程序的一些校验和(例如$(shell md5sum program)在语法中)。make