42Seoul/libft

libft Bonus - Makefile

재윤 2023. 3. 24. 13:51
반응형

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
반응형