문제

긴 명령 라인을 가진 많은 C 파일을 빌드하는 Makefile을 가지고 있으며 다음과 같은 규칙을 통해 출력을 정리했습니다.

.c${MT}.doj:

        @echo "Compiling $<";\
         $(COMPILER) $(COPTS) -c -o $@ $<

이제 @가 컴파일 라인이 방출되는 것을 억제함에 따라 이것은 훌륭합니다. 그러나 오류가 발생하면 오류 메시지, 명령 줄이 없습니다. 누구든지 명령 줄을 방출하는 "깔끔한"방법을 생각할 수 있습니까? 내가 생각할 수있는 것은 파일에 반향을 일으키고 더 높은 레벨이 오류를 잡고 파일을 고정시키는 것입니다. 내가 아는 해킹.

도움이 되었습니까?

해결책

테스트하고 작동했습니다 (GNU Make in Linux) :

.c${MT}.doj:
     @echo "Compiling $<";\
          $(COMPILER) $(COPTS) -c -o $@ $<  \
          || echo "Error in command: $(COMPILER) $(COPTS) -c -o $@ $<" \
          && false

다른 팁

이 질문은 꽤 오래되었지만, 당신의 인터넷 검색을 위해, 나는이 상황에서 내가 할 일이 별명이라고 생각합니다. make 에게 make -s (Silent Mode) 내 껍질에 @ 줄 앞에 접두사 echo 또는 다른 진단 명령이 호출되고 있습니다. 전체 출력을 원할 때 make, 나는 그것을 \make.

또한이 상황에서는 전형적인 일을하고 @echo 자체 라인에서, 실제 규칙 명령은 별도의 줄에 그리고 @'에스.

간단한 솔루션은 간단한 스크립트를 사용하는 것입니다. abc 다음과 같이 :

#!/bin/bash

$@
code=$?
if (( code )); then
  echo error running $@
fi
exit $code

그런 다음 글을 쓸 수 있습니다 abc $(COMPILER) $(COPTS) -c -o $@ $< 당신의 Makefile. 파이프 나 리디렉션이있을 때는 작동하지 않습니다 (적용 할 때 abc 실행하려는 명령 대신).

비슷한 코드를 직접 넣을 수도 있습니다. Makefile 그것이 바람직하다면.

최근에 유틸리티를 사용했습니다 로그 텍스트 BAT 파일 실행 과정에서 어떤 출력이 발생했는지 추적하는 것과 같은 경우. 확인하십시오. 어디에서 발생했는지 알고 싶다면 이것이 유용 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top