读书人

“ sed amp;#x27;s,\($*\)\.o[ :]*\1.o $

发布时间: 2013-01-01 14:04:18 作者: rapoo

“ sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \” 做何解释?
%.d: %.c
$(CC) -M $(CPPFLAGS) $< > $@.$$$$; \
sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
rm -f $@.$$$$

哪位高手解释一下“ sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \”
[解决办法]
混乱编程 or 乱码
[解决办法]
这是sed命令的用法了。Stream Editor
简单来讲就是替换。这里采用逗号作为基本语法的分隔。一般的形式是sed 's/pattern/new/g'
\($*\)\.o[ :]*替换为\1.o $@ :
后面的g表示全局替换,就是不止替换一次。

同时又是用在makefile当中,所以要牵扯到$*,$@之类的自动变量。
$*,表示的是target的除去了suffix后的filename,也就是%.d: %.c当中的%部分。
$@,表示的是target,也就是%.d

sed操作的文件是来自上面命令的生成的临时文件$@.$$$$

最后再把sed的输出定向到零时文件$@.$$$$

没有猜错的话,这应该是Manage project with GNU make 3rd Edition当中的例子。

读书人网 >C++

热点推荐