2014-10-02 9 views
2

.mmpz 파일 집합을 lmms을 사용하여 .ogg 개의 파일로 자동 변환하려면 GNU Make를 사용하려고합니다. 현재 lmms에 버그가있어 출력 파일을 생성 한 후 오류를 일으키고 오류가 발생하지 않도록 make으로 안내합니다. 규칙 앞에 -을 추가하면 make이 오류를 무시하고 출력 파일을 제거 할 수 없지만 오류 메시지는 여전히 생성됩니다. 나는 다음 시도했다 : 모두는 segfault가 예상되는 출력 파일을 생성 할 수있는 실패를 표시하지 않는 것을 고려메이크 파일 무시 segfault

/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) 

의 라인을 따라 뭔가를 생산

[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 

을,이다 거기 방법은 버그가 해결 될 때 까지이 오류를 숨기려면? make -i 여전히 오류를 출력하는 것으로 보입니다.

+0

true '는 make가'lmms' 명령의 실패를 무시할 때 앞서가는'-'와 같은 효과를냅니다. –

+0

@MarkGaleck 그 점에서 나는 너와 완전히 동의한다. '|| 참 '이 선행'-'보다 절대적으로 바람직하다. 저의 요점은 대부분 OP의 3 번째 라인 에서처럼 필요하지 않다는 것입니다. –

+0

@ 이탄 잘 돌아왔다. 미안하지만, 좋은 점이 아니다. –

답변

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

이것은 각 실패마다 (EXPECTED FAILURE :가 인쇄되기 전에) 세그멘테이션 오류 메시지를 여전히 출력한다. – rcorre

+0

@murphyslaw 오해 나는 세분화 오류가 "정상적인"오류 메시지가 아니기 때문에 프로세스 표준 오류에 인쇄되지 않습니다. 잠깐만 이것 좀 들여다 보자. –

+0

@murphyslaw 확인해보기 –