Makefile 정리
Makefile이 더 궁금하다면 위 링크에 정리해 두었음
make란 프로그램을 유닉스 계열 운영체제에서 컴파일 하거나 빌드할 때 자동화된 명령 실행을 관리하는 도구이다.
Makefile은 위 make명령어가 읽고 해석하는 파일로 어떤 파일을 어떻게 빌드할지 지시하는 스크립트 파일이다.
Makefile 기본 구조
타겟(target): 의존성(dependency) 명령어(command)타겟: 만들어야 할 결과물 (ex. 실행 파일, 라이브러리 파일)
의존성: 타겟을 만들기 위해 필요한 소스 파일, 오브젝트 파일 등
명령어: 타겟을 만들기 위해 수행해야 할 셸 명령어
NAME = libft.a
CC = cc
CFLAGS = -Wall -Wextra -Werror
INCLUDES = -I .
SRCS = ./ft_isalnum.c ./ft_isalpha.c ./ft_isascii.c \
./ft_isdigit.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_strncmp.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_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_SRCS = ./ft_lstnew.c ./ft_lstadd_front.c ./ft_lstsize.c ./ft_lstlast.c \
./ft_lstadd_back.c ./ft_lstclear.c ./ft_lstdelone.c ./ft_lstiter.c ./ft_lstmap.c
OBJS = $(SRCS:.c=.o)
BONUS_OBJS = $(BONUS_SRCS:.c=.o)
all: $(NAME)
$(NAME): $(OBJS)
ar rcs $(NAME) $(OBJS)
bonus: $(OBJS) $(BONUS_OBJS)
ar rcs $(NAME) $(OBJS) $(BONUS_OBJS)
%.o: %.c
$(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@
clean:
rm -f $(OBJS) $(BONUS_OBJS)
fclean: clean
rm -f $(NAME)
re: fclean all
.PHONY: all clean fclean re bonus
| 변수명 | 역할 |
|---|---|
| NAME | 생성할 라이브러리 이름 (libft.a) |
| CC | 사용할 컴파일러 (cc) |
| CFLAGS | 컴파일 시 사용할 옵션들 (-Wall -Wextra -Werror) |
| INCLUDES | 헤더 파일 경로 지정 (-I .) |
| SRCS | 기본 과제용 소스 파일 목록 |
| BONUS_SRCS | 보너스 과제용 소스 파일 목록 |
| OBJS | SRCS 파일을 .o 파일로 변환한 목록 |
| BONUS_OBJS | BONUS_SRCS 파일을 .o 파일로 변환한 목록 |
| 규칙 이름 | 역할 |
|---|---|
| all | 기본 과제 소스 파일을 컴파일하여 libft.a를 만든다. |
| $(NAME) | 오브젝트 파일들을 묶어 libft.a 라이브러리 파일을 생성한다. |
| bonus | 기본 소스 + 보너스 소스를 컴파일해서 라이브러리를 만든다. |
| %.o: %.c | 모든 .c 파일을 .o 파일로 변환하는 규칙 (패턴 룰) |
| clean | 생성된 .o 파일들을 삭제한다. |
| fclean | .o 파일들과 libft.a까지 모두 삭제한다. |
| re | fclean을 하고 다시 all을 실행한다. |
| .PHONY | 파일이름과 관계없이 항상 실행할 규칙들 명시 (all, clean, fclean, re, bonus) |