Makefile, make 기초 글을 먼저 보면 좋습니다.
TL; DR:
SRCS에 소스 파일이, OBJ_DIR에 임시 폴더명이 있다고 가정합니다.
.PHONY: norm
norm: $(SRCS:.c=.norm_flag)
%.norm_flag: %.c
-norminette $< && touch $@
.PHONY: clean_norm_flags
clean: clean_norm_flags
clean_norm_flags:
rm -f $(SRCS:.c=.norm_flag)
Makefile
복사
별도의 임시 폴더를 사용하지 않는 경우
.PHONY: norm
norm: $(patsubst ./%.c,$(OBJ_DIR)/%.norm_flag,$(SRCS))
$(OBJ_DIR)/%.norm_flag: %.c
-norminette $< && touch $@
Makefile
복사
별도의 임시 폴더를 사용하는 경우
Makefile에 이 코드를 추가하면 make norm이 수정됐거나 검사에 실패한 파일만 다시 검사합니다.
장점
make는 정말 단순하지만 강력한 도구입니다.
make를 통해 검사한다는 것만으로 아래 두가지 장점을 더 얻을 수 있습니다.
1.
make의 증분 빌드 기능을 활용해 이미 검사한 파일은 다시 검사하지 않습니다.
2.
(GNU make의 경우에는) -j 옵션을 활용해 norm 검사를 병렬로 수행할 수 있습니다.
동작 원리
원리는 정말 간단합니다.
•
c 파일마다 그에 대한 norm_flag 파일이 있습니다.
•
norm_flag 파일은 norm 검사가 최신 상태를 반영했는지 나타내는 플래그입니다.
•
그 파일이 아직 없거나, c파일보다 먼저 생겼다면 norm 검사가 최신 상태를 반영하지 않았다는 뜻입니다.
•
norm 검사를 성공적으로 마치면 norm_flag 파일의 마지막 수정 시각을 갱신합니다.
추가로, -norminette $< && touch $@의 -는 실패해도 무시하라는 의미입니다.
응용
이를 응용해 norminette 뿐 아니라 eslint 등 다른 툴에 대해서도 적용할 수 있습니다!
같이 보면 좋은 글