Makefile

jaehlee·2025년 4월 27일

Libft

목록 보기
26/26

Makefile 정리
Makefile이 더 궁금하다면 위 링크에 정리해 두었음

make

make란 프로그램을 유닉스 계열 운영체제에서 컴파일 하거나 빌드할 때 자동화된 명령 실행을 관리하는 도구이다.

핵심기능

  • 어떤 파일을 언제 다시 컴파일해야 하는지 자동으로 판단한다.
  • 필요한 명령어만 실행해서 최소한의 작업만 한다
  • 컴파일 과정을 자동화하고, 간단한 명령어(make) 한 번으로 관리할 수 있다.

Makefile

Makefile은 위 make명령어가 읽고 해석하는 파일로 어떤 파일을 어떻게 빌드할지 지시하는 스크립트 파일이다.

Makefile 기본 구조

타겟(target): 의존성(dependency)
	명령어(command)

타겟: 만들어야 할 결과물 (ex. 실행 파일, 라이브러리 파일)
의존성: 타겟을 만들기 위해 필요한 소스 파일, 오브젝트 파일 등
명령어: 타겟을 만들기 위해 수행해야 할 셸 명령어

Libft Makefile

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보너스 과제용 소스 파일 목록
OBJSSRCS 파일을 .o 파일로 변환한 목록
BONUS_OBJSBONUS_SRCS 파일을 .o 파일로 변환한 목록

규칙 설명

규칙 이름역할
all기본 과제 소스 파일을 컴파일하여 libft.a를 만든다.
$(NAME)오브젝트 파일들을 묶어 libft.a 라이브러리 파일을 생성한다.
bonus기본 소스 + 보너스 소스를 컴파일해서 라이브러리를 만든다.
%.o: %.c모든 .c 파일을 .o 파일로 변환하는 규칙 (패턴 룰)
clean생성된 .o 파일들을 삭제한다.
fclean.o 파일들과 libft.a까지 모두 삭제한다.
refclean을 하고 다시 all을 실행한다.
.PHONY파일이름과 관계없이 항상 실행할 규칙들 명시 (all, clean, fclean, re, bonus)
profile
공부하는 개발자

0개의 댓글