Search
Duplicate

뱅글뱅글 Makefile spinner 만들기!

간단소개
팔만코딩경 컨트리뷰터
ContributorNotionAccount
주제 / 분류
C
Shell
Scrap
태그
9 more properties
minishell을 만들면서 정말 1000번은 넘게 make를 치다보니.. 이제 make에서 나오는 명령어들도 질려서 보기 싫어졌다..
뭔가 이쁘게 만들 방법이 없을까 고민하다가 progress bar 혹은 spinner를 사용하면 깔끔하고 이쁘게 만들 수 있을 것 같았다.

Makefile에서 Script 실행하기

우선 Makefile에서 Script를 실행하는 방법을 알아보자! 대략 아래와 같은 Makefile이 있다고 생각하자.
NAME = sunashell ... $(NAME): $(OBJ) @$(CC) $(CFLAGS) $(INCLUDE) $(SRCS) -o $(NAME)
Makefile
복사
여기서 어떤 문장을 출력하려면 echo 와 같이 shell 구문을 그대로 사용하면 된다.
NAME = sunashell ... $(NAME): $(OBJ) @echo "hello world!" @$(CC) $(CFLAGS) $(INCLUDE) $(SRCS) -o $(NAME)
Makefile
복사
그런데 조금 더 복잡한 출력과 반복문, 조건문 등을 사용하려면 따로 Script파일을 만드는게 좋은데 그렇다면 이렇게 만든 Script 실행파일을 어떻게 Makefile에서 실행시킬 수 있을까?
아래는 스피너 Script파일이다.
i=1 j=0 max=15000 sp="/-\|" echo -n "SUNASHELL is Ready " echo -n ' ' while [ $j -lt $max ] do printf "\b${sp:i++%${#sp}:1}" j=$(($j+1)) done printf "\b✅"
Shell
복사
방법은 아주 간단하다!! 그냥 우리가 bash에서 하는 것처럼 ./a.sh와 같이 해주면 된다!
NAME = sunashell ... $(NAME): $(OBJ) @./a.sh @$(CC) $(CFLAGS) $(INCLUDE) $(SRCS) -o $(NAME)
Makefile
복사
그런데 기대했던 결과가 나오지 않는다 ㅜㅜ echo의 -n 옵션이 정상적으로 작동하지 않았다.
그 이유를 stackoverflow에서 찾을 수 있었다.
Stackoverflow의 답변
어느정도 pc마다 차이가 있을 수 있는 것 같지만 내 경우에는 맥에서 /bin/shecho를 사용하는데 이 echo-n옵션을 지원하지 않아서 일어난 결과인 것 같았다.
그래서 Script를 실행할 default Shell을 지정해 주기로 하였다.
NAME = sunashell SHELL = bash ... $(NAME): $(OBJ) @./a.sh @$(CC) $(CFLAGS) $(INCLUDE) $(SRCS) -o $(NAME)
Makefile
복사
그러면 이제 정상적으로 실행되는 것을 볼 수 있다!
여러 명령어들을 조합하면 이런 것도 가능하다.