我想知道如何在Makefile中避免一些回声:
clean:
rm -fr *.o
Run Code Online (Sandbox Code Playgroud)
此规则将打印:
$>make clean
rm -fr *.o
$>
Run Code Online (Sandbox Code Playgroud)
我怎么能避免这种情况?
plo*_*lof 71
首先:实际的命令必须在下一行(或至少是与GNU的情况下做,这可能是与其他制作的不同 - 我不知道那)
clean:
rm -rf *.o
Run Code Online (Sandbox Code Playgroud)
(注意,你需要一个TAB之前rm -rf *.o的每个规则)
保持沉默可以通过添加前缀@:
所以你的makefile变成了
clean:
@rm -rf *.o
Run Code Online (Sandbox Code Playgroud)
如果没有*.o要删除的文件,您可能仍会收到错误消息.要禁止这些,请添加以下内容
clean:
-@rm -rf *.o 2>/dev/null || true
Run Code Online (Sandbox Code Playgroud)
2>/dev/null 将任何错误消息传递给/ dev/null - 这样您就不会看到任何错误-在命令前可以确保make忽略了非归零码cla*_*laf 24
事实上我正在寻找其他东西,将这一行添加到Makefile中:
.SILENT:clean
Run Code Online (Sandbox Code Playgroud)
同时静默执行"干净"目标的每一步.
直到有人指出这个缺点,我用这个作为我最喜欢的解决方案!
pho*_*an1 14
我正在回应这个古老的话题,因为它在搜索中占据了很高的位置并且答案令人困惑.为了做到用户想要的,所需要的只是:
clean:
@rm -f *.o
Run Code Online (Sandbox Code Playgroud)
@表示make不会回显该命令.告诉我们忽略任何错误的-f论据,比如没有文件,并且总是返回成功.rmrm*.o
我移除了有机磷农药例如-r,因为这意味着递归,在这里我们只是rm荷兰国际集团.o的文件,没有递归.
没有必要,2>&1 >/dev/null因为-f没有错误打印.
.SILENT: clean
Run Code Online (Sandbox Code Playgroud)
代替@它工作,但它与Makefile中的命令不在同一个地方,因此稍后维护项目的人可能会感到困惑.这就是为什么@是首选.这是更好的参考地点.
| 归档时间: |
|
| 查看次数: |
36110 次 |
| 最近记录: |