2012-03-11 108 views
6

我的C++項目的部分makefile使用diff命令來比較最近生成的代碼輸出的兩個文件。問題是,如果文件不同,腳本你沒有失敗,應該繼續。還有更多的文件需要比較,我需要在構建腳本結束之前查看它們。例如,這樣的事情,在不同文件上使用diff時,Makefile失敗

diff: * 
     diff $(TEST)/T4.board $(TEST)/T4.board 
     diff $(TEST)/T4.board $(TEST)/sample.board 

第一行不會導致問題,因爲這些文件是相同的。第二行比較不同的文件,一旦顯示差異,我看到

Makefile:102: recipe for target `diff' failed 
make: *** [diff] Error 1 

並且腳本停止。我怎樣才能讓它繼續下去?

+0

'diff'應該在失敗時返回成功0和1。問題是我如何處理失敗?我只用了一個星期左右的makefile。 – gsingh2011 2012-03-11 18:00:29

回答

5

會讓你的整個配方沒有返回錯誤:

diff: * 
    diff $(TEST)/T4.board $(TEST)/T4.board  || exit 0 
    diff $(TEST)/T4.board $(TEST)/sample.board || exit 0 

人們可以使用echo 'Files differ',而不是exit 0

+0

謝謝,這兩個選項的工作。我認爲這是愚蠢的,雖然makefiles沒有選擇忽略錯誤。對於像'diff'這樣的東西,返回1並不是世界的盡頭,並且在每個diff的末尾加入exit 0會讓人討厭。 – gsingh2011 2012-03-11 18:19:02

+1

@ gsingh2011:Makefiles可以選擇忽略錯誤。看到我的答案。 – thiton 2012-03-11 19:01:47

+0

@ gsingh2011噢,我忘了它,你可以在命令之前加一個減號('-')來忽略它的退出代碼。見thiton的答案。 – 2012-03-11 19:02:46

7

隨着GNU使手動國section 5.5 "Errors",您可以通過-前綴命令忽略一個命令的返回狀態:

diff: * 
    -diff $(TEST)/T4.board $(TEST)/T4.board 
    -diff $(TEST)/T4.board $(TEST)/sample.board 
+0

+1,我忘了這種原生的方式來抑制GNU Make中的錯誤。 – 2012-03-11 19:06:14