免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4144 | 回复: 5
打印 上一主题 下一主题

用makefile自动更新程序的编译时间 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-03-13 12:23 |只看该作者 |倒序浏览
需求:想在程序运行的时候,打印出编译的时间。
不用宏而用makefile的方法来实现这种需求。
先看代码,test.c:

  1. #include<stdio.h>;
  2. char build_time[] = "MAKE_DATE_TIME";
  3. main(){
  4. printf("\nBuild %s\n", build_time);
  5. }
复制代码


再看makefile:

  1. CC=gcc
  2. MAINFILE=test.c
  3. MAINFILENEW=$(MAINFILE).new
  4. MAINFILECOPY=$(MAINFILE).cp
  5. TIME=`date`
  6. .INIT:
  7.         @cp $(MAINFILE) $(MAINFILECOPY)
  8.         @sed "s/MAKE_DATE_TIME/$(TIME)/" $(MAINFILE)>;$(MAINFILENEW)
  9.         @mv $(MAINFILENEW) $(MAINFILE)
  10. ALL:
  11.         $(CC) $(MAINFILE)
  12. .DONE:
  13.         @mv $(MAINFILECOPY) $(MAINFILE)
  14. clean:
  15.         @rm a.out

复制代码


原理:先在源代码中,包含这样一个定义:
char build_time[] = "MAKE_DATE_TIME";
然后在makefile中,在编译前(.INIT),先cp一个备份文件,然后用sed把“MAKE_DATE_TIME”替换成make时候的时间,然后再编译文件,等编译完以后(.DONE),再将备份的文件换回去。
补充:在makefile用,尝试用命令trap来屏蔽某些信号,但是未成功,有哪位大虾知道如果解决这个问题吗?

论坛徽章:
0
2 [报告]
发表于 2004-03-13 18:57 |只看该作者

用makefile自动更新程序的编译时间

这倒是个不错的招,有意思。但是sed没有必要用得那么麻烦,你那后两句话可以缩减为一句:
cat $(MAINFILE)|sed "s/MAKE_DATE_TIME/$(TIME)/" >;$(MAINFILE)

论坛徽章:
0
3 [报告]
发表于 2004-03-14 11:48 |只看该作者

用makefile自动更新程序的编译时间

原帖由 "forest077" 发表:
这倒是个不错的招,有意思。但是sed没有必要用得那么麻烦,你那后两句话可以缩减为一句:
cat $(MAINFILE)|sed "s/MAKE_DATE_TIME/$(TIME)/" >;$(MAINFILE)


你试过了吗?我还没有试,不过我估计你这样用,会把文件给清空了。

论坛徽章:
0
4 [报告]
发表于 2004-03-15 16:00 |只看该作者

用makefile自动更新程序的编译时间

不会,我平常都是这样用的。
如果是sed '......' file >;file,那么确实会把文件清空,因为重定向符号是先准备好流,然后再处理前面的命令,这样调用,就会先清掉file的内容,然后再执行sed命令。
使用cat file|sed '....' >;file的话,先执行cat命令,把文件内容输出到管道后,准备好输出流,就是清空file文件,然后再执行sed命令,sed命令处理的内容是cat输出的流。

论坛徽章:
0
5 [报告]
发表于 2004-03-15 19:12 |只看该作者

用makefile自动更新程序的编译时间

好象要依赖于操作系统。我在RedHat Linux下试,文件不会被清空;但是在SunOS下面,文件被清空了。可见,用这种方法,要移植的时候,可能会遇到问题。

论坛徽章:
0
6 [报告]
发表于 2004-03-15 19:30 |只看该作者

用makefile自动更新程序的编译时间

哦,这我倒确实不知道,可惜我没有sun的环境
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP