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

bob007 2012-07-20 10:56:11
%.d: %.c
$(CC) -M $(CPPFLAGS) $< > $@.$$$$; \
sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
rm -f $@.$$$$

哪位高手解释一下“ sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \”
...全文
1178 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Linux-Torvalds 2012-07-20
  • 打赏
  • 举报
回复
后面的\都是为了和下面的命令连成一行,然后都用用;分隔,所以都是放在一个subshell当中执行。
Linux-Torvalds 2012-07-20
  • 打赏
  • 举报
回复
这是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当中的例子。
xiaohuh421 2012-07-20
  • 打赏
  • 举报
回复
混乱编程 or 乱码

24,857

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧