makefile에서 명령 호출의 에코를 억제 하시겠습니까?


147

출력을 stdout에 인쇄 해야하는 과제에 대한 프로그램을 작성했습니다. 할당 스펙은 호출 될 때 make run > outputFile프로그램을 실행하고 스펙에 지정된 것과 동일한 SHA1 지문을 갖는 파일에 출력을 기록 하는 Makefile 작성을 요구합니다 .

내 문제는 내 makefile입니다.

...
run:
     java myprogram

또한 내 프로그램 (예 : java myprogram)을 실행하는 명령을 출력 파일에 인쇄하여 내 파일 에이 추가 줄이 포함되어 지문이 잘못되었습니다.

명령 호출에 명령 호출을 반영하지 않고 명령을 실행할 수있는 방법이 있습니까?

답변:


247

@gmake에게 실행중인 명령을 인쇄하지 않도록 지시하려면 명령의 시작 부분에 추가하십시오 . 이처럼 :

run:
     @java myprogram

Oli가 제안했듯이 이것은 Bash가 아닌 Make의 기능입니다.

반면에 Bash는 명시 적으로 명령하지 않는 한 (예 : -x옵션을 사용하여) 명령을 실행하지 않습니다 .


6
+1. 그러나 OP의 혼란을 없애기 위해 이것이 Bash가 아닌 Make의 기능임을 분명히 밝힐 가치가 있습니다.
Oliver Charlesworth

1
@OliCharlesworth : 말이됩니다. 감사.

모든 에코를 비활성화하는 방법이 있습니까? 아니면 섹션의 전원을 껐다가 다시 켤까요?
Benubird

2
@Benubird make -s가 그렇게하고 IMHO는 여기서 훨씬 더 나은 솔루션입니다. 최근이 질문에 대한 별도의 답변으로 게시되었습니다.
tripleee

1
이는 경우 ... 다음 문 :( 어떤 아이디어를하지 작동합니까?
user1623521

74

더 간단하고 사용 make -s(자동 모드)!


3
공감 :이 답변은 실제로 여기에 허용되는 답변이어야합니다. @명령으로 Makefile을 뿌리면 디버깅하기가 어려워지고 많은 혼란이 가중됩니다.
tripleee

11
나는 이것이 갈 길이라는 것에 동의하지만 원래 문제 설명에서 나는 내가 만드는 사람이 아닐 것입니다-내 강사가 될 것입니다. 따라서 전달 된 플래그를 제어 할 수 없습니다. makefile 내에서 출력을 제어해야했습니다. 그러나 실제 세계에서 가장 실용적인 솔루션을 선호합니다.
noobler

6
.SILENT:대상을 사용하여 직접 제어 할 수 있습니다 . make.mad-scientist.net/managing-recipe-echoing
MadScientist

실제로 경고가 -Wall있으면 여전히 인쇄합니다. 물론 -s경고를보고 싶다면 왜 사용 하시겠습니까?
User81862311

33

당신은 또한 사용할 수 있습니다 .SILENT

.SILENT: run
hi:
     echo "Hola!"
run:
     java myprogram

이 경우 make hi명령이 출력되지만 make run출력되지는 않습니다.


1

명령의 앞에 오는 효과 @는 줄에 후행 백 슬래시를 사용하여 명령을 확장하여 섹션으로 확장 할 수 있습니다. .PHONY출력을 억제하기 위한 명령이 필요한 경우 다음 과 같이 섹션을 시작할 수 있습니다.

@printf "..."
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.