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
등 설정에 따라서 목적 파일의 이름을 바꾸면
빌드 환경을 간단하게 구성할 수 있습니다.