@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的各种在线帮助中找到相关信息。。。谷歌会为你指路。