- 论坛徽章:
- 0
|
需求:想在程序运行的时候,打印出编译的时间。
不用宏而用makefile的方法来实现这种需求。
先看代码,test.c:
- #include<stdio.h>;
- char build_time[] = "MAKE_DATE_TIME";
- main(){
- printf("\nBuild %s\n", build_time);
- }
复制代码
再看makefile:
- CC=gcc
- MAINFILE=test.c
- MAINFILENEW=$(MAINFILE).new
- MAINFILECOPY=$(MAINFILE).cp
- TIME=`date`
- .INIT:
- @cp $(MAINFILE) $(MAINFILECOPY)
- @sed "s/MAKE_DATE_TIME/$(TIME)/" $(MAINFILE)>;$(MAINFILENEW)
- @mv $(MAINFILENEW) $(MAINFILE)
- ALL:
- $(CC) $(MAINFILE)
- .DONE:
- @mv $(MAINFILECOPY) $(MAINFILE)
- clean:
- @rm a.out
复制代码
原理:先在源代码中,包含这样一个定义:
char build_time[] = "MAKE_DATE_TIME";
然后在makefile中,在编译前(.INIT),先cp一个备份文件,然后用sed把“MAKE_DATE_TIME”替换成make时候的时间,然后再编译文件,等编译完以后(.DONE),再将备份的文件换回去。
补充:在makefile用,尝试用命令trap来屏蔽某些信号,但是未成功,有哪位大虾知道如果解决这个问题吗? |
|