%.d: %.c
$(CC) -M $(CPPFLAGS) $< > $@.$$$$; \
sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
rm -f $@.$$$$
p-162:sed替換命令的格式是‘s///g’如果沒有g,則sed的替換操作只對文本中的第一次出現的匹配模式進行替換。關於‘s///’命令的另一個注意點是‘/’分隔符有許多替換選項。如果正在執行字符串替換,並且規則表達式或替換字符串中有許多斜杠,則可以通過在’s’之后指定一個不同的字符來更改分隔符。例如,下列將把所有出現的/usr/local替換成/usr:
sed –e ‘s:/usr/local:/usr:g’ mylist.txt
在該例中,使用冒號作為分隔符。如果需要在規則表達式中使用分隔符,可以在它前面加入反斜杠。關於\(\)是保留的模式空間,參見p-70,$* 是makefile中匹配的“莖”,$$$$表示當前進程的進程號,命令行中還運用了輸入輸出重定向。