2010-06-29 155 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