Make와 Makefile 뭐예여
Make는 리눅스의 명령어로 파일관리 유틸리티다.
Make 명령어를 사용하면 반복적으로 수행해야하는 컴파일을 쉽게 만들어주고, Make 명령어를 사용할 때 Makefile이라는 설정 파일을 참조해서 컴파일이 이루어진다.
즉 Makefile은 참조할 설정 파일, Make는 libray 및 컴파일 환경, 실행 명령어 들을 관리 하는 명령어이다.
NAME = libft.a //목표파일 이름 정하기
CC = cc //사용할 컴파일러 (여기서는 cc = gcc)
CFLAGS = -Wall -Wextra -Werror //컴파일 명령어 쓰기
AR = ar rcs //오브젝트 파일들을 아카이브 하는 명령어(라이브러리 생성)
RM rm -f //파일 삭제 명령어 (-f 옵션: 파일 없을 때 에러 안 남)
SRC = ft_atoi.c ft_bzero.c ft_calloc.c ft_isalnum.c ft_isalpha.c ft_isascii.c \
ft_isdigit.c ft_isprint.c ft_itoa.c ft_memchr.c ft_memcmp.c ft_memcpy.c \
ft_memmove.c ft_memset.c ft_putchar_fd.c ft_putendl_fd.c ft_putnbr_fd.c \
ft_putstr_fd.c ft_strchr.c ft_strdup.c ft_striteri.c ft_strjoin.c ft_strlcat.c \
ft_strlcpy.c ft_strlen.c ft_strmapi.c ft_strncmp.c ft_strnstr.c ft_strrchr.c \
ft_strtrim.c ft_substr.c ft_tolower.c ft_toupper.c ft_split.c
//컴파일 할 필수 소스 파일 적기
BONUS_SRC = 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
//컴파일 할 보너스 소스 파일 적기
OBJ = $(SRC:.c=.o) //소스파일(.c) -> 오브젝트 파일(.o)로 변환
BONUS_OBJ = $(BONUS_SRC:.c=.o) //BONUS_SRC 파일을 .o 파일로 변환
BONUS_DONE = bonus_done_marker //bonus 작업 완료 후 찍어놓을 빈 파일 이름
all: $(NAME) //기본 목표, libft.a를 만든다.
$(NAME): $(OBJ) //SRC를 컴파일해서 오브젝트(.o) 만들고 libft.a를 만든다.
$(AR) $(NAME) $(OBJ)
bonus: $(BONUS_DONE) //mandatory + bonus 오브젝트를 libft.a에 추가하고, marker 파일 만든다.
$(BONUS_DONE): $(OBJ) $(BONUS_OBJ)
$(AR) $(NAME) $(BONUS_OBJ)
touch $(BONUS_DONE)
clean:
$(RM) $(OBJ) $(BONUS_OBJ) $(BONUS_DONE) //모든 오브젝트(.o) 파일들과 bonus marker 파일을 삭제한다.
fclean: clean //clean + libft.a까지 삭제한다.
$(RM) $(NAME)
re: fclean all //fclean 후 all을 다시 실행 (다시 빌드)
.PHONY: all clean fclean re //명령어 타겟임을 명시해서 make 오동작 방지한다.
너무 성의가 없는 것 같아요 ~