본문 바로가기
Programming Skills/Makefile

[Makefile] 출력 숨기기

by jungcow 2021. 5. 29.

출력을 숨기고 싶을 때

Makefile 내에서의 동작은 모두 터미널로 출력된다. 하지만 내부적인 동작을 모두 보여주고 싶지 않을 때가 있을 것이다. 이를 위한 방안을 소개하려 한다.

1. 옵션으로 해결

make -s
make --silent
  • 위와 같은 옵션으로 모든 output을 안보여줄 수 있다.
  • 하지만 출력하고 싶은 부분과 출력 안하고 싶은 부분이 따로 있을 땐 위와 같은 방법으론 해결할 수 없다.

2. Makefile 내에 옵션 추가

MAKEFLAGS += --silent

all    :
    echo "hello"
  • 위와 같은 옵션을 주지 않고도 모든 처리들을 출력 안하고 실행 시킬 수 있다.
  • 하지만 이것도 마찬가지로 부분적인 silent는 되지 않는다.

다음을 보기 전에 make 의 Echoing 부터 알아보자

  • make 명령은 보통 실행되기 전에 recipe(command)의 각 line들을 모두 출력한다. 이를 echoing 이라고 부른다.
    • 즉, 내가 recipe에 적은 명령들을 다시 echo 하게 된다.

3. @

$(NAME)    :    $(OBJS)
    @mkdir $(DIR)

clean        :
    @rm -rf $(OBJS)
fclean    : clean
    @rm -rf *.a $(NAME)
  • 위와 같이 @를 recipe앞에 붙여주게 되면 위에서 언급한 echoing을 억압해준다. 즉, 출력을 하지 못하게 막아준다.

  • 반대로, recipe들만 출력하고 실행을 시키지 않는 옵션도 있다.

    • make -n
      make --just-print
    • 이러한 경우엔 @로 처리된 recipe들도 모두 출력된다.

    • 이 옵션은 주로 어떤 recipe를 make가 중요하게 여기는지를 알아볼 때 사용한다.

  • @ 를 알고 난 후 위의 -s 옵션을 다시 봐보자면 -s 옵션은 모든 recipe 라인에 @을 붙여넣는 것이라고 생각할 수 있다.

4. .SILENT

.SILENT    :    clean fclean
  • 위와 같이 적어주게 되면 clean과 fclean에 해당하는 recipe들의 echoing을 막아주게 된다.
  • @를 해당 target의 모든 recipe라인에 적어준 것과 동일하다.

참고

  1. Echoing

'Programming Skills > Makefile' 카테고리의 다른 글

[Makefile] if문 사용하기  (0) 2021.05.29