출력을 숨기고 싶을 때
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라인에 적어준 것과 동일하다.
참고
'Programming Skills > Makefile' 카테고리의 다른 글
[Makefile] if문 사용하기 (0) | 2021.05.29 |
---|