看gnu make的makefile,在自动依赖跟踪里用到了一条sed命令
sed ‘s,/($*/)/.o[ :]*,/1.o $@ : ,g’ <
$@.$$$$
> $@;
顺便学习一下sed编辑器
%.d: %.c
@set -e; rm -f $@; /
$(CC) -M $(CPPFLAGS) $< >
$@.$$$$
; /
sed ‘s,/($*/)/.o[ :]*,/1.o $@ : ,g’ <
$@.$$$$
> $@; /
rm -f
$@.$$$$
通过gcc等编译器找到.c文件的依赖的头文件,放到
$@.$$$$
里$@就是.d文件 $$$$是临时文件
$@.$$$$
的内容可能是 main.o : main.c defs.h
这句话的意思是:从
$@.$$$$
里读取每一行,处理完了放到$@里。怎么处理呢?就是把’main.o : ‘替换成 ‘main.o main.dep :’
于是main.o : main.c defs.h就变成了
main.o main.dep : main.c defs.h
版权声明:本文为fancyerII原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。