2014-10-02 264 views
2

我正在嘗試使用GNU Make來使用lmms自動將一組.mmpz文件轉換爲.ogg文件。目前lmms中存在一個錯誤,導致它在生成輸出文件後發生段錯誤,導致make吐出錯誤。在規則強制make之前添加-以忽略該錯誤並阻止其刪除輸出文件,但仍會產生錯誤消息。我已經試過如下:Makefile忽略段錯誤

[email protected] -r $(MPPZDIR)/$*.mmpz -f ogg -o $(OGGDIR)/$*.ogg 
[email protected] -r $(MPPZDIR)/$*.mmpz -f ogg -o $(OGGDIR)/$*.ogg 2> /dev/null 
[email protected] -r $(MPPZDIR)/$*.mmpz -f ogg -o $(OGGDIR)/$*.ogg || true 

所有產生沿着

/bin/sh: line 1: 3325 Segmentation fault  (core dumped) lmms -r resources/mmpz/song.mmpz -f ogg -o content/music/song.ogg 2> /dev/null 
Makefile:28: recipe for target 'content/music/song.ogg' failed 
make: [content/music/song.ogg] Error 139 (ignored) 

考慮到段錯誤預期,並不表示發生故障產生的輸出文件的行的東西,有沒有隱藏這個錯誤的方法,直到bug修復? make -i也似乎仍然輸出錯誤。

+0

'|| true'與領先的'-'具有相同的作用,可以忽略「lmms」命令的失敗。 – 2014-10-02 20:23:11

+0

@MarkGaleck在這方面,我完全同意你的看法。 '||對於領先的'-'來說'true'是絕對可取的。我的觀點主要是,這兩個都沒有必要,因爲在OP的例子中第三行。 – 2014-10-03 02:20:10

+0

@Eng以及我收回,對不起,不是一個好點 – 2014-10-03 02:32:08

回答

3
define EXPECTED_FAIL 
if ! { $1 ; } 2>[email protected]; then \ 
    echo EXPECTED FAILURE: ; cat [email protected]; \ 
fi 
endef 

<target>: <prerequisites> 
    $(call EXPECTED_FAIL, lmms -r $(MPPZDIR)/$*.mmpz -f ogg -o $(OGGDIR)/$*.ogg) 
+0

這仍然打印每個故障(在預期故障:打印之前)的分段故障消息。 – rcorre 2014-10-03 15:33:51

+0

@murphyslaw哦我看到這是因爲分段錯誤不是一個「正常的」錯誤消息,它不會打印在進程stderr上。請繼續讓我看看這個。 – 2014-10-03 18:50:47

+0

@murphyslaw現在就試試吧 – 2014-10-03 18:55:37