我在手册中遇到了以下sed
命令。make
sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g'
并且有以下效果(这是手册中的一个例子):
main.o : main.c defs.h
# is turned into:
main.o main.d : main.c defs.h
在我看来,'\($*\)\.o'
是为了匹配文件名filename.o
,但我不明白如何'\($*\)'
实现这一点。我知道$
在正则表达式中, 位于行尾是特殊的,但这不适用于此处。
那么'\($*\)'
这里的意思是什么?
完整代码:
%.d: %.c
@set -e; rm -f $@; \
$(CC) -M $(CPPFLAGS) $< > $@.$$$$; \
sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
rm -f $@.$$$$