我试图rm通过写入来抑制命令错误
Makefile文件:
...
clean: $(wildcard *.mod)
-rm $^ 2>/dev/null
...
Run Code Online (Sandbox Code Playgroud)
我跑了:
$ make clean
rm 2>/dev/null
make: [clean] Error 64 (ignored)
Run Code Online (Sandbox Code Playgroud)
我仍然遇到了错误.
无论如何,当我尝试
$ rm [some non-existent files] 2>/dev/null
Run Code Online (Sandbox Code Playgroud)
在bash shell上,它运行正常.
如何2>/dev/null在makefile中使用?
2>dev/null将重定向错误输出以便您看不到它,它不会阻止 shell 提高错误级别。即使提高了错误级别-,shell 命令前面的符号也会告诉GNU make继续,但它不会阻止 shell 提高它。
你想要的是 shell 不要提高错误级别,这可以这样做:
Unix(归功于此答案)
-rm $^ 2>/dev/null ; true
Run Code Online (Sandbox Code Playgroud)
视窗
-rm $^ 2>NUL || true
Run Code Online (Sandbox Code Playgroud)
或者如果您rm在 Windows 上没有
-del /F /Q $^ 2>NUL || true
Run Code Online (Sandbox Code Playgroud)
在看到shell命令失败后make: [clean] Error 64 (ignored),make正在打印该消息.因此,它不会受到您在配方中使用的任何重定向的影响.
两个修复:
使用-f rm标志.rm -f永远不会返回错误.(好吧,无论如何,如果确实如此,你可能想知道它!)
停止shell命令返回错误:只需附加|| :到命令.说什么?好吧,如果rm成功,你的工作完成,让生活很快乐.OTOH如果rm失败,shell在或运行第二个命令.
:是一个内置的shell总是成功,并且比true恕我直言更好.
在这种情况下,第一个是最好的,尽管第二个是一般的,如果效率稍低的模式.
.PHONY: clean
clean: ; rm -rf *.mod
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
982 次 |
| 最近记录: |