작성 시 팁 (1)
- 모든 함수의 프로토타입을 작성해야 함.
- malloc, free 위해서
stdlib.h필요 - write 위해서
unistd.h필요
작성 시 팁 (2)
mandatory와 bonus part를 분리
- 따라서, wildcard를 쓰지 말 것을 추천
- 그냥 변수명을 다 쓰는 것이 제일 좋음.
relinking 이슈 고려
relinking이란? 의존파일의 존재가 타겟파일보다 뒤늦게 발견될 경우 다시 파일을 만드는 것.
- all을 그냥 작성할 경우, mandatory로 all을 만든 다음, 또 bonus 파트를 포함한 all을 생성.
- 단, 이 경우 paco 실행이 안되기에 프로세스를 잠재우는 sleep를 중간에 투입
코드
makefile
NAME = libft.a
CFLAGS = -I ./libft.h -Wall -Wextra -Werror
SRCS = ft_isalpha.c ft_isdigit.c ft_isalnum.c ft_isascii.c \
ft_isprint.c ft_strlen.c ft_memset.c ft_bzero.c \
ft_memcpy.c ft_memmove.c ft_strlcpy.c ft_strlcat.c \
ft_toupper.c ft_tolower.c ft_strchr.c ft_strrchr.c \
ft_memchr.c ft_memcmp.c ft_strnstr.c ft_atoi.c \
ft_calloc.c ft_strdup.c ft_strncmp.c ft_substr.c \
ft_strjoin.c ft_strtrim.c ft_split.c ft_itoa.c \
ft_strmapi.c ft_striteri.c ft_putchar_fd.c ft_putstr_fd.c \
ft_putendl_fd.c ft_putnbr_fd.c
BONUS = ft_lstnew.c ft_lstadd_front.c ft_lstsize.c ft_lstlast.c \
ft_lstadd_back.c ft_lstdelone.c ft_lstclear.c ft_lstiter.c ft_lstmap.c
OBJS = $(SRCS:.c=.o)
OBJS_BONUS = $(BONUS:.c=.o)
ifdef ALLOW_BONUS
OBJ_TEMP = $(OBJS) $(OBJS_BONUS)
else
OBJ_TEMP = $(OBJS)
endif
all : $(NAME)
$(NAME) : $(OBJ_TEMP)
ar -rc libft.a $(OBJ_TEMP)
clean:
rm -rf $(OBJS) $(OBJS_BONUS)
bonus: $(OBJ_TEMP)
# sleep 1
@$(MAKE) ALLOW_BONUS=1 $(NAME)
fclean: clean
rm -rf $(NAME)
re : fclean all
.PHONY : all clean fclean re
relinking을 고려하지 않은 파일
makefile
NAME = libft.a
CFLAGS = -I ./libft.h -Wall -Wextra -Werror
SRCS = ${wildcard ./*.c}
OBJS = $(SRCS:.c=.o)
all : $(NAME)
$(NAME) : $(OBJS)
ar -rc libft.a $(OBJS)
clean:
rm -rf $(OBJS)
fclean: clean
rm -rf $(NAME)
re : fclean all
.PHONY : all clean fclean re