gpt4 book ai didi

Makefile 教程中令人困惑的 Sed 单行代码

转载 作者:IT王子 更新时间:2023-10-29 00:25:17 26 4
gpt4 key购买 nike

谁能用英语解释这个 sed 单行代码(越详细越好)?

@sed 's/\($*\)\.o[ :]*/\1.o $@ : /g' < $*.d > $@; \
rm -f $*.d; [ -s $@ ] || rm -f $@

这是本教程的一部分: http://mad-scientist.net/make/autodep.html

我有一组非常量源文件,并希望根据我的源文件中拼写的内容(包括)自动生成我的依赖关系树。

在那之前我一直在很好地学习教程......

附言我对 sed select/replace 有基本的了解,但我对匹配字符串和所有重定向层感到困惑...。我还通读了一次 makefile 教程,因此具有标准 生成文件...

最佳答案

sed 模式将首先由 make 处理,因此如果它适用的规则试图构建 foo.P 那么 $@ 将被转换为 foo.P$*foo。这意味着实际的 sed 命令将类似于:

sed 's/\(foo\)\.o[ :]*/\1.o foo.P : /g' < foo.d > foo.P

\(foo\) 完全匹配 foo 并将第一个替换设置为匹配的内容(即 foo)\. 匹配文字点,[ :]* 匹配任意数量的空格和冒号。

如您所见,\1 替换有点多余,因为匹配的字符串是固定的。这也同样有效。

sed 's/foo\.o[ :]*/foo.o foo.P : /g' < foo.d > foo.P

可能由以下 Material 制成:

sed 's/$*\.o[ :]*/$*.o $@ : /g' < $*.d > $@

关于Makefile 教程中令人困惑的 Sed 单行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5890389/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com