在Makefile
的以下代码中,我可以问以下两个问题吗?
@
宏有什么作用?
sed
命令是否将\
替换为//
?
.PHONY: prereqs
prereqs:
(cd ../../data/ilsvrc12; make)
@sed -i 's/\r//' run.py
@chmod +x run.py
答案 0 :(得分:2)
阅读documentation of GNU make
。尤其是它的§5.2 Recipe Echoing
通常,make将在执行配方之前打印配方的每一行。我们之所以称呼它为回声,是因为它看起来像是您自己在键入线条。
当一行以“ @”开头时,该行的回显将被抑制。
但是请注意,@
不是 宏。它是make
怪异语法的一部分。
sed命令是否将\替换为//?
sed(1)手册页对此进行了介绍(但请考虑bash
quoting上的规则)。因此,您的sed
调用将删除\r
(sed
解释为返回字符)的出现。
顺便说一句,您可能会发现尝试remake(与-x
一起调试Makefile
很有用。
答案 1 :(得分:2)
sed命令将特殊字符\r
(回车)替换为空字符串...基本上将其删除。这似乎是一个穷人的dos2unix实现,它将DOS样式的CRNL行尾对转换为POSIX / UNIX样式的NL行尾字符。