Search
Duplicate
🐛

Make 이렇게도 쓸 수 있어요! - norm 검사

간단소개
norm 검사에도 Makefile을 쓰면 더 좋다는데… 어떻게?
팔만코딩경 컨트리뷰터
ContributorNotionAccount
주제 / 분류
Makefile
Scrap
태그
makefile
9 more properties

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 등 다른 툴에 대해서도 적용할 수 있습니다!
같이 보면 좋은 글