Search
Duplicate

Makefile 에서 로딩중 띄우기

간단소개
Makefile 변수를 통하여 로딩중 띄운다.
팔만코딩경 컨트리뷰터
ContributorNotionAccount
주제 / 분류
Makefile
Shell
Linux
Mac OS
Scrap
태그
로딩중
9 more properties
make 할때마다 gcc 명령어들이 뜨는게 간지가 안난다.
명령어를 보여주지 말고 명령어가 진행될때마다 로딩 스피너를 돌리고싶었다.
로딩 스피너를 출력하는 방법은 아래의 링크를 참고하였다.
위의 링크를 보면, idx 변수를 증가시키면서 sp 문자열의 idx % 4 번째 문자를 출력하고 있다.
이를 Makefile 에서 구현하기 위해서 먼저 간단히 Makefile에서 변수 사용법과 shell 사용법을 알아보자.

Makefile 변수 사용법

기본적으로 변수 선언은 다음과 같이 한다.
이외에도 변수 선언을 다양하게 할 수 있는데, 여기서 따로 서술하지 않겠다.
idx = 0
Makefile
복사
명령어 안에서 변수는 다음과 같이 쓸 수 있다.
test : $(eval idx = 2)
Makefile
복사
eval 내장 함수를 통하여 값을 지정하는 방식이다.

Makefile안에서 shell 명령어 쓰기

또한, shell 명령어를 사용할 수있다.
SHELL = /bin/bash test : $(shell echo "hello")
Makefile
복사
Makefile 의 기본 shell 은 /bin/sh 으로 되어있기 때문에
정확하게 bash 를 쓰고 싶으면 SHELL = /bin/bash를 넣어줘야한다.

Makefile 에서 로딩 스피너 넣기

이제 변수와 shell 명령어를 적절히 쓰면, 다음과 같은것을 해볼 수있다.
SHELL = /bin/bash idx = 0 %.o : %.c $(eval idx = $(shell expr $(idx) + 1)) @printf "$(idx)\n" @$(CC) $(CFLAGS) -c $< -o $@ # 출력결과 # 1 # 2 # 3 # 4 # ...
Makefile
복사
이때까지 배운 것들을 활용해서 로딩 스피너를 만들어보자.
SHELL = /bin/bash sp = /-\|/ idx = 0 all : $(NAME) %.o : %.c $(eval idx = $(shell expr $(idx) + 1)) $(eval t_idx = $(shell expr $(idx) % 4 + 1)) $(eval chr = $(shell echo $(sp) | cut -c $(t_idx))) @if [ $(idx) = 1 ]; then\ echo -n "Loading ... ";\ fi @printf "\b$(chr)" @$(CC) $(CFLAGS) -c $< -o $@
Makefile
복사
idx 가 1부터 점점 커지면서,
idx 를 4로 나눈 나머지값을 t_idx 에 저장하고,
sp 의 t_idx 번째 를 chr 에 넣고
출력하는 방식이다.

Reference