반응형
Bonus 파트를 구현하기 위해서는 makefile에 bonus를 추가해주어야 한다.
그런데 리링크 방지를 하기위한 코드를 짜야하는데 그 방법이 무엇일까?
WITH_BONUS라는 것을 하나 만들어서 수행을 할 때 어떤 파일을 들고 올 것인지에 대해 넣어준다.
ifdef, endif를 넣어주어서 makefile을 만들게 되면 리링크 방지를 할 수 있다.
왜?
OBJ에서 필요한 파일들 즉, OBJS와 OBJS_BONUS가 바뀐 부분이 있는지 체크를 한 후 바뀐 게 없으면 리링크가 되지 않는다.
CC = gcc
CFLAGS = -Wall -Wextra -Werror
NAME = libft.a
# SRCS = $(wildcard *.c)
SRCS = ft_isalpha.c ft_isdigit.c ft_isalnum.c ft_isascii.c ft_isprint.c \\
ft_memset.c ft_strlen.c ft_strlcpy.c ft_strrchr.c ft_bzero.c\\
ft_strlcat.c ft_toupper.c ft_tolower.c ft_strchr.c ft_strncmp.c\\
ft_memcpy.c ft_memmove.c ft_memchr.c ft_strnstr.c ft_memcmp.c\\
ft_atoi.c ft_calloc.c ft_strdup.c ft_substr.c ft_strjoin.c ft_split.c\\
ft_itoa.c ft_strtrim.c ft_strmapi.c ft_striteri.c ft_putchar_fd.c\\
ft_putstr_fd.c ft_putendl_fd.c ft_putnbr_fd.c
SRCS_BOUNS = ft_lstnew.c ft_lstadd_front.c ft_lstsize.c ft_lstlast.c\\
ft_lstadd_back.c ft_lstmap.c ft_lstclear.c ft_lstadd_back.c\\
ft_lstdelone.c ft_lstiter.c
OBJS = $(SRCS:.c=.o)
OBJS_BOUNS = $(SRCS_BOUNS:.c=.o)
INCLUDE = libft.h
ifdef WITH_BONUS
OBJ = $(OBJS) $(OBJS_BOUNS)
else
OBJ = $(OBJS)
endif
all: $(NAME)
$(NAME): $(OBJ)
ar cr $@ $(OBJ)
.c.o: $(OBJ)
$(CC) $(CFLAGS) -c -o $@ $< -I $(INCLUDE)
bonus:
make WITH_BONUS=1 all
# all: $(NAME)
# $(NAME): $(OBJS)
# ar cr $@ $(OBJS)
# .c.o: $(OBJS)
# $(CC) $(CFLAGS) -c -o $@ $< -I $(INCLUDE)
# bonus: $(OBJS) $(OBJS_BOUNS)
# ar cr $(NAME) $(OBJS) $(OBJS_BOUNS)
clean:
rm -f $(OBJS)
rm -f $(OBJS_BOUNS)
fclean: clean
rm -f $(NAME)
re: fclean all
.PHONY: clean fclean re
반응형
'42Seoul > libft' 카테고리의 다른 글
libft Bonus - lstdelone, lstclear, lstiter, lstmap (0) | 2023.03.24 |
---|---|
libft Bonus - lstnew, lstadd_front, lstsize (0) | 2023.03.24 |
libft - ft_putchar_fd, ft_putstr_fd, ft_putendl_fd, ft_putnbr_fd (0) | 2023.03.24 |
libft - strtrim, striteri, split (0) | 2023.03.24 |
libft - strjoin, itoa, strmapi (0) | 2023.03.24 |