2010-06-29 936 views
30

我正在制作一个将输出文件(foo.o)移动到不同目录(baz)的Makefile。如何忽略mv错误?

输出文件根据需要移动到目录。但是,如果我再次键入make,make将不会重新编译输出文件,但当mv尝试将不存在的空文件移动到目录baz时会出错。

原来这就是我在规则make all所有编译后的定义:

-test -e "foo.o" || mv -f foo.o ../baz 

不幸的是,我仍然得到错误。

+1

看什么altendky做:-mv foo.o将../baz – Malcolm 2013-04-02 18:21:56

回答

9
[email protected][ -d $(dir [email protected]) ] || mkdir -p $(dir [email protected]) 

是我用默默地创建一个文件夹,如果它不存在。对于您的问题,这样的事情应该工作

[email protected][ -e "foo.o" ] && mv -f foo.o ../baz 
+0

我仍然得到使用这个时被忽略的错误,但最好的解决办法至今。谢谢 – Sam 2010-07-01 17:42:51

+0

是的,你仍然会从make中得到沉默的忽略错误,我不完全同意@应该使它完全沉默。 – Charles 2010-07-01 20:33:42

+0

@不会影响命令的make输出,它只会告知不打印invoke本身。 – JesperE 2010-07-02 08:55:22

1
-test -e "foo.o" || if [ -f foo.o ]; then mv -f foo.o ../baz; fi; 

这应该工作

0

喜欢的东西

test -e "foo.o" && mv -f foo.o ../baz 

应该工作:操作人员应&&而不是||

您可以通过尝试这些命令与此实验:

test -e testfile && echo "going to move the file" 
test -e testfile || echo "going to move the file" 
27

我发现没有人实际上已经回答了原来的问题本身呢,具体怎么忽略错误(所有问题的答案目前只调用命令而言,如果它不会造成一个错误)。

要真正忽略错误,你可以简单地做:

mv -f foo.o ../baz 2>/dev/null; true 

这将stderr输出重定向到null,并按照命令true(它总是返回0,导致使相信不管命令成功的实际发生了什么),允许程序流程继续。

+3

这是一个很好的。当然,如果有人想看到有关丢失文件的输出,也可以放弃“真实”部分并使用“ - ”。 – 2014-02-27 19:00:25

99

Errors in Recipes(从TFM)

要忽略配方中的线路错误,在 行的文本的开头写一个-(初始选项卡后)。

所以目标会是这样的:

moveit: 
    -mv foo.o ../baz