首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

“ sed 's,\($*\)\.o[ :]*\1.o $@ : ,g' < $@.$$$$ > $@; \” 作何解释

2013-01-01 
“ sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' $@.$$$$ $@ \” 做何解释?%.d: %.c$(CC) -M $(CPPF

“ 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当中的例子。

热点排行