저는 Make를 둘러싼 래퍼에 불과한 간단한 빌드 시스템을 구현하고 있습니다. 이 빌드 시스템은 이미 자체 오류 메시지를 표시하므로 Make가 이와 같은 오류 메시지를 생성하는 것을 원하지 않습니다.
make: *** [/cool/makefile:116: /fun/target.o] Error 1
실패했을 때.
나는 -s
Make의 출력 대부분을 억제하기 위해 이 플래그를 사용했습니다. 나는 Make가 오류를 무시하는 것을 원하지 않습니다. 나는 여전히 그것이 중지되고 상태로 종료되기를 원합니다. 실행 중인 Make 작업에 의해 인쇄된 메시지를 make 2> /dev/null
계속 보고 싶기 때문에 모든 오류 출력을 종료할 수는 없습니다 .stderr
Make 출력을 수동으로 구문 분석하고 정리하지 않고 이를 수행할 수 있는 방법이 있습니까? 저는 GNU Make 4.2.1을 사용하고 있으며 GNU Make 전용 솔루션은 마음에 들지 않습니다.
답변1
귀하의 시스템은 make용 래퍼이므로 makefile을 생성한다고 가정합니다. 2>&3
makefile에 모든 쉘 명령을 추가하도록 생성기를 조정하고 프로그램이 파일 설명자 3을 표준 오류(파일 설명자 2)로 리디렉션하고 파일 설명자 2를 /dev/null
. it 에 추가 /dev/null
하면 빌드 명령은 래퍼의 표준 오류로 이동하는 표준 오류로 인쇄됩니다.
손으로 작성한 makefile을 사용하는 경우 makefile의 구문이 너무 혼란스럽지 않다면(예: 명령을 생성하는 멋진 GNU make 매크로가 없는 경우) 이러한 리디렉션을 추가하도록 변환할 수 있습니다. 탭 및 선택 사항 또는 로 @
시작 -
하고 이전 줄이 백슬래시로 끝나지 않는 각 줄의 경우 exec 2>&3;
탭 및 선택 사항 뒤에 추가하세요 @-
.
makefile을 변경하는 대신 인수를 사용하여 호출할 수 있습니다. 그러면 SHELL=/path/to/shell_wrapper
인수 shell_wrapper
를 실행하고 표준 오류를 다음과 같이 다른 설명자로 리디렉션합니다.
#!/bin/sh
eval "$2" 2>&3