Sanitizer에는 AddressSanitizer, MemorySanitizer, UBSanitizer 등이 있습니다.
CFLAGS += -fsanitize=address
CFLAGS 변수에 -fsanitize=address만 추가해도 AddressSanitizer를 사용할 수 있습니다.
AddressSanitizer와 MemorySanitizer를 동시에 사용할 수 없습니다.1번, 2번으로 인해 -fsanitizer 플래그를 자주 바꾸게 되고,
3번으로 인해 -fsanitizer 플래그를 바꿀 때마다 make re로 다시 빌드해야 합니다.
Sanitizer를 사용할 때 목적 파일의 이름을 바꿀 수 있습니다.
SUFFIX := $(if $(SANITIZER),.$(SANITIZER))
%$(SUFFIX).o: %.c
    $(CC) $(CFLAGS) -c $< -o $@ -MMD $(if $(SANITIZER),-fsanitize=$(SANITIZER),)
output$(SUFFIX).a: $(SRCS:.c=$(SUFFIX).o)
$(NAME): output$(SUFFIX).a
    cp $< $@
.PHONY: $(NAME)
make SANITIZER=address로 빌드하면 AddressSanitizer를 사용하게 되고,
Sanitizer를 바꾸더라도 이미 빌드한 것을 삭제하지 않아 빠르게 다시 빌드할 수 있습니다.
같은 방법으로 .so(.dylib)로 빌드하기 위한 -fPIC 플래그에 따라서,
또는 dev/prod, debug/release 등 설정에 따라서 목적 파일의 이름을 바꾸면
빌드 환경을 간단하게 구성할 수 있습니다.