@macro在makefile中做什么?

@macro在makefile中做什么?,makefile,Makefile,在下面的代码中,我可以问以下两个问题吗 @宏的作用是什么 sed命令是否将\替换为/ .PHONY: prereqs prereqs: (cd ../../data/ilsvrc12; make) @sed -i 's/\r//' run.py @chmod +x run.py 阅读。值得注意的是,它说 通常,make会在配方执行前打印每一行。我们称之为回音,因为它给人的感觉是你自己在打字 当一行以“@”开头时,该行的回音将被抑制 但是请注意,@不是宏。这是make奇怪

在下面的代码中,我可以问以下两个问题吗

@
宏的作用是什么

sed
命令是否将
\
替换为
/

.PHONY: prereqs
prereqs:
    (cd ../../data/ilsvrc12; make)
    @sed -i 's/\r//' run.py
    @chmod +x run.py
阅读。值得注意的是,它说

通常,make会在配方执行前打印每一行。我们称之为回音,因为它给人的感觉是你自己在打字

当一行以“@”开头时,该行的回音将被抑制

但是请注意,
@
不是宏。这是
make
奇怪语法的一部分

sed命令是否将\替换为/

这在手册页中有介绍(但要考虑上的规则)。因此,您的
sed
调用正在删除出现的
\r
(该
sed
解释为返回字符)


顺便说一句,您可能会发现尝试(使用
-x
)调试
Makefile
很有用。sed命令正在用空字符串替换特殊字符
\r
(回车符)。。。基本上是移除它。这似乎是一个穷人的dos2unix实现,用POSIX/UNIX样式的NL行结束字符转换DOS样式的CRNL行结束对。

我不认为
\r
意味着这里的回车。这意味着两个字符的顺序是反斜杠,然后是r(因为它在shell引号中)。是的,shell肯定不会转换它。但是,sed会这样做(可能取决于您使用的sed版本)。在我的系统上,
echo'foo\rbar'| sed's/\r/'
生成
foo\rbar
(例如,sed不会更改它),而
echo'foo\rbar'| sed's/\\r/'
回显
foobar
(例如,从sed中转义反斜杠会导致它在两个字符串上操作
\r
而不是特殊字符回车).谢谢你抽出时间。如果它正在删除
\r
的文字引用,那么
/
用于什么?它是一个(空)替换字符串。
s/X/Y/
表示“对于每个字符串X替换字符串Y”。这里X是
\r
,Y是“”(空字符串)。
/
是一个分隔符;事实上,你可以在这里使用任何字符。这也可以写成
s、\r、,
,它的工作原理也是一样的。如上所述,您可以在
sed
手册页或sed的各种在线帮助中找到相关信息。。。谷歌会为你指路。