Jas*_*ick 7 c linux makefile sed
任何人都可以用英语解释这个sed单行(更详细,更好)?
@sed 's/\($*\)\.o[ :]*/\1.o $@ : /g' < $*.d > $@; \
rm -f $*.d; [ -s $@ ] || rm -f $@
Run Code Online (Sandbox Code Playgroud)
这是本教程的一部分:http: //mad-scientist.net/make/autodep.html
我有一组非常量的源文件,并希望根据源文件中拼写的内容(包括)自动生成我的依赖树.
我很好地遵循了教程,直到...
PS我对sed select/replace有基本的了解,但我对匹配的字符串和重定向的所有层感到困惑....我还阅读了makefile教程一次,因此具备标准 makefile的基本知识......
CB *_*ley 12
战略经济对话模式将被make首先进行处理,所以如果它的适用规则,极力打造foo.P
然后$@
将被转换为foo.P
和$*
到foo
.这意味着实际的sed命令将类似于:
sed 's/\(foo\)\.o[ :]*/\1.o foo.P : /g' < foo.d > foo.P
Run Code Online (Sandbox Code Playgroud)
\(foo\)
foo
完全匹配并将第一个替换设置为匹配(即foo
)\.
匹配文字点并[ :]*
匹配任意数量的空格和冒号.
正如您所看到的\1
那样,由于匹配的字符串是固定的,因此替换有点多余.这也会起作用.
sed 's/foo\.o[ :]*/foo.o foo.P : /g' < foo.d > foo.P
Run Code Online (Sandbox Code Playgroud)
这本可以来自:
sed 's/$*\.o[ :]*/$*.o $@ : /g' < $*.d > $@
Run Code Online (Sandbox Code Playgroud)