Makefile의 줄 끝에 주석을 인쇄하지 마세요.

Makefile의 줄 끝에 주석을 인쇄하지 마세요.

메이크파일의 줄 끝에 주석을 추가하고 싶습니다.

rule:
    echo 1 # Print 1

그러나 이 makefile이 실행되면 명령줄에도 주석이 인쇄됩니다.

$ make rule
echo 1 # Print 1
1

하지만 명령이 아닌 주석을 숨기고 싶습니다. 인쇄되지 않는 makefile의 줄 끝에 주석을 추가하는 방법이 있습니까? (주석 앞에 를 추가하여 주석을 숨길 수 있다는 것을 알고 있지만 @, 이는 전체 줄이 주석이고 줄 끝이 아닌 경우에만 작동합니다.)

답변1

이것은 # print 1주석이 아닙니다 make. 전체 echo 1 # print 1줄(선행 TAB 제외)이 쉘로 전달됩니다( $(SHELL)및 를 사용하여 실행됨 -c).that-line추가 인수로), 쉘은 이를 해당 컨텍스트에서 주석으로 해석합니다. a echo "foo # bar"또는 with $(SHELL)s 와 같이 주석 리더로 간주되지 않는 다른 상황에서는 #그렇지 않습니다. 어떤 경우에도 사용되거나 @비활성화 되지 않는 .SILENTmake쉘에 전달된 코드가 인쇄됩니다.

만들다Makefile 레시피의 주석은 #해당 줄의 첫 번째 문자여야 합니다.

rule:
# print 1:
    echo 1

또는 백슬래시를 사용하여 주석 줄을 계속할 수 있습니다.

rule:
#\
    # print 1:
    echo 1

다음을 수행할 수 있습니다.

rule:
    @# print 1:
    echo 1

이는 이 레시피의 각 줄에 대해 쉘을 호출합니다. 첫 번째 줄은 단 하나의 인라인 쉘 스크립트입니다.껍데기댓글, @건너뛰기에코셸에 전달된 코드의 일부 make가 아닌 셸 코드의 일부입니다.

바라보다info make 'comments, in recipe'GNU 시스템에 대한 make추가 정보 ( 에 대한 GNU 구현)

레시피의 댓글은 댓글이 아닙니다. 그대로 쉘에 전달됩니다. 쉘이 이것을 주석으로 처리하는지 여부는 쉘에 따라 다릅니다.

더 일반적으로info make commentsMakefile의 주석에 대해.


이제 할 수 있는 일은 make규칙을 사용하여 echo를 완전히 비활성화 .SILENT하고 쉘이 xtrace해당 옵션을 사용하여 echo 자체를 수행하도록 하는 것입니다.

SHELL = sh -o xtrace
export PS4 =
.SILENT: rule

rule:
    echo 1 # print 1

관련 정보