열렬히.뛰기

makefile 만들기

école 42 > libft > makefile 만들기

작성 시 팁 (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