加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 获取没有宏的编译时日期和时间

发布时间:2020-12-16 05:05:25 所属栏目:百科 来源:网络整理
导读:使用c 我在自动计划中编译我的代码,需要使用代码本身编译代码的时间.目前我只是使用__DATE __,__ TIMME__宏来获取编译时的日期和时间.但是,这会导致二进制文件更改,即使没有对源进行任何更改(宏将在编译时膨胀)这是不好的(我不希望设置认为如果没有更改则二
使用c

我在自动计划中编译我的代码,需要使用代码本身编译代码的时间.目前我只是使用__DATE __,__ TIMME__宏来获取编译时的日期和时间.但是,这会导致二进制文件更改,即使没有对源进行任何更改(宏将在编译时膨胀)这是不好的(我不希望设置认为如果没有更改则二进制更改来源).

是否有可能在不使用会导致源更改的任何方法的情况下获得编译时间?

谢谢

解决方法

标准的__DATE__和__TIME__宏执行您所观察到的操作,返回与时间相关的字符串.

它取决于系统(可能还有编译器),特别是构建系统(例如GNU make).

一个可能的想法可能是在一个单独的时间戳文件中链接,如(在make语法中)

timestamp.c:
        date +'const char timestamp[]="%c";' > $@

program: $(OBJECTS) timestamp.c
        $(LINKER.cc) $^ -o $@ $(LIBES)
        rm -f timestamp.c

时间戳.然后应该重新生成,并且您的程序将在每次make时重新链接(因此生成的程序确实会改变,但是大多数代码-thru $(OBJECTS)使变量 – 将保持不变).

或者,您可以例如在一些数据库或文本日志文件中记录链接的时间,例如,

program: $(OBJECTS)
      $(LINKER.cc) $^ -o $@ $(LIBES)
      date +'$@ built at %c' >> /var/log/build.log

(您可以使用记录器而不是日期来记录syslog中的记录)

然后生成的程序不会更改,但您将在某处创建构建时间戳.顺便说一句,你可以记录二进制程序的一些校验和(例如make语法中的$(shell md5sum程序)).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读