[42์์ธ] libft ์ ๋ฆฌ : ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ง๋ค๊ธฐ ์ํ Makefile
๐makefile ๋ง๋ค๊ธฐ!
์ ๊ธฐํ makefile ์ธ๊ณ... ๋๊ฒ ์ ์ ๋ก ๋๋ ๋๋์ด๋น
libft ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ง๋ค๊ธฐ ์ํ makefile ์ฝ๋์ด๋ค.
ํ๊ฒ์ libft.a
SRCS = ft_isalnum.c ft_isprint.c ft_memcmp.c ft_putchar_fd.c ft_split.c \
ft_strlcat.c ft_strncmp.c ft_substr.c ft_atoi.c ft_isalpha.c \
ft_itoa.c ft_memcpy.c ft_putendl_fd.c ft_strchr.c ft_strlcpy.c \
ft_strnstr.c ft_tolower.c ft_bzero.c ft_isascii.c \
ft_memmove.c ft_putnbr_fd.c ft_strdup.c ft_strlen.c ft_strrchr.c \
ft_toupper.c ft_calloc.c ft_isdigit.c ft_memchr.c ft_memset.c \
ft_putstr_fd.c ft_strjoin.c ft_strmapi.c ft_strtrim.c ft_striteri.c
OBJS = $(SRCS:.c=.o)
BONUS = ft_lstadd_back.c ft_lstadd_front.c ft_lstclear.c \
ft_lstdelone.c ft_lstiter.c ft_lstlast.c \
ft_lstmap.c ft_lstnew.c ft_lstsize.c
BONUS_OBJS = $(BONUS:.c=.o)
CC = gcc
RM = rm -f
CFLAGS = -Wall -Wextra -Werror -I.
NAME = libft.a
ifdef WITH_BONUS
OBJECTS = $(OBJS) $(BONUS_OBJS)
else
OBJECTS = $(OBJS)
endif
all: $(NAME)
$(NAME): $(OBJECTS)
ar rcs $(NAME) $(OBJECTS)
clean:
$(RM) $(OBJS) $(BONUS_OBJS)
fclean: clean
$(RM) $(NAME)
re: fclean $(NAME)
bonus:
make WITH_BONUS=1 all
.PHONY: all clean fclean re bonus
mendatory์ bonus ํํธ ๋๋ก ๋๋์ด ์ปดํ์ผ ๊ฐ๋ฅํ๋๋ก
SRCS = mendatory cํ์ผ๋ค
BONUS = bonus cํ์ผ๋ค
๋ ๊ฐ๋ก ๋๋ด๋ค.
<makefile์ ์ ์๋์ด ์๋ ๋งคํฌ๋ก๋ค>
AR = ar (Archive maintaining program)
AS = as (Assembler)
CC = cc (= gcc , C compiler)
CXX = g++ (C++ compiler)
CO = co (extracting file from RCS)
CPP = $(CC) -E (C preprocessor)
FC = f77 (Fortran compiler)
LEX = lex (LEX processor)
PC = pc (Pascal compiler)
YACC = yacc (YACC processor)
TEX = tex (TEX processor)
TEXI2DVI = texi2dvi (Texiinfo file processor)
WEAVE = weave (Web file processor)
RM = rm -f (remove file)
...๋์ ์ฒ์๋ณด๋ ๊ฑฐ ๋ช ๊ฐ ์๋ค.
๋ด๊ฐ ์ฌ์ฉํ ๊ฑด
CC = gcc
RM = rm -f
์์ ๋๊ฐ์ง..ใ ใ ใ ์์ ๋งคํฌ๋ก๋ค์ ๋ํดํธ๊ฐ์ด ์ ํด์ ธ ์๋ค. ์ฌ์ฉ์๊ฐ ์ฌ์ ์ํ์ฌ ์ฌ์ฉํ ์ ์๋ค!!
<ํ๋๊ทธ ๋งคํฌ๋ก๋ค>
ARFLAGS = (ar achiver์ ํ๋๊ทธ) *
ASFLAGS = (as ์ด์
๋ธ๋ฌ์ ํ๋๊ทธ)
CFLAGS = (C ์ปดํ์ผ๋ฌ์ ํ๋๊ทธ) *
CXXFLAGS = (C++ ์ปดํ์ผ๋ฌ์ ํ๋๊ทธ) *
COFLAGS = (co ์ ํธ๋ฆฌํฐ์ ํ๋๊ทธ)
CPPFLAGS = (C ์ ์ฒ๋ฆฌ๊ธฐ์ ํ๋๊ทธ)
FFLAGS = (Fortran ์ปดํ์ผ๋ฌ์ ํ๋๊ทธ)
LDFLAGS = (ld ๋ง์ปค์ ํ๋๊ทธ) *
LFLAGS = (lex ์ ํ๋๊ทธ) *
PFLAGS = (Pascal ์ปดํ์ผ๋ฌ์ ํ๋๊ทธ)
YFLAGS = (yacc ์ ํ๋๊ทธ) *
์์ ๋งคํฌ๋ก๋ค์ ๋ํดํธ ๊ฐ์ด ์ ํด์ ธ์์ง ์๋ค.
* ํ์๊ฐ ๋์ด์๋ ๊ฒ ์์ฃผ ์ฌ์ฉํ๋ ๋งคํฌ๋ก๋ผ๊ณ ํ๋ค.
CFLAGS ์ฌ์ฉํ๋ค.
CC = gcc
RM = rm -f
CFLAGS = -Wall -Wextra -Werror -I.
์ด๋ ๊ฒ ์ฌ์ฉ!!
์ฒซ๋ฒ์งธ ์ค ์ปดํ์ผ๋ฌ๋ gcc๋ฅผ ์ฌ์ฉํ๋ค.
๋๋ฒ์งธ ์ค์ ํ์ผ ์ง์ฐ๊ธฐ -f ์ต์ ์ ๊ฐ์ ๋ก ์ง์ฐ๊ธฐ ์ต์ ์ด๋ค.
์ธ๋ฒ์งธ ์ค์ ์ปดํ์ผ ์ต์ ๋ค
W ๋ถ์ ์ ๋ค์ warning option๋ค์ด๋ค.
-I๋ ํค๋ํ์ผ ์ถ๊ฐ! ๋ณดํต ๋ค์ ํค๋ํ์ผ์ ๋๋ ํฐ๋ฆฌ ๊ฒฝ๋ก๋ฅผ ์ด๋ค. ๋ ํ์ฌ ๋๋ ํฐ๋ฆฌ์ ํค๋ํ์ผ์ด ์๊ธฐ ๋๋ฌธ์ .์ ์ผ๋ค.
์์ ์ ๊ต์๋์ด ์ ๊ฑฐ ๋ถ์ด๊ณ ์ปดํ์ผํ๋ ์ต๊ด์ด ์ข๋ค ๊ทธ๋ฌ๋นใ _ใ 42์์ธ์์๋ ๋ฎฌ๋ฆฌ๋ท์ ์ ์ต์ ๋ค์ ์ฌ์ฉํด์ ์ฑ์ ํ๋ค.
<์กฐ๊ฑด๋ฌธ ์ฌ์ฉํ๊ธฐ>
ifdef
else
endif
์ด์ฉํด์ bonus์ผ ๋๋ง ๋ณด๋์ค ์ปดํ์ผํ๊ธฐ!
์๋ ์ฝ๋๋ ๋ณด๋์ค๊ฐ ์์ผ๋ฉด OBJECTS์ mendatory์ bonus .o ํ์ผ์ ๋ ๋ค ๋ฃ๋๋ค.
๊ทธ ์ธ์๋ OBJECTS์ mendatoryํํธ์ .oํ์ผ๋ง ๋ฃ๋๋ค.
ifdef WITH_BONUS
OBJECTS = $(OBJS) $(BONUS_OBJS)
else
OBJECTS = $(OBJS)
endif
๐งก์๋ ๋งํฌ์์ ์ฐธ๊ณ ํ์ฌ ์์ฑํจ๐ซ
GNU Make ๊ฐ์ข: Makefile๋ฅผ ์์ฑํ ๋ ์๋ฉด ์ข์ ๊ฒ๋ค
์ด์ ํ์ด์ง ๋ค์ํ์ด์ง ์ฐจ๋ก Makefile์ ์์ฑํ ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์๊ณ ์์ผ๋ฉด ์ ์ตํ ๊ฒ๋ค์ ๊ธฐ์ ํ๋ค. ์ด์ ๊ฐ์ข์ ๋ด์ฉ์ ๋์ฒด๋ก ์ดํดํ๊ณ ์๋ค๋ฉด ์ข์ ํ์ด ๋ ๊ฒ์ด๋ค. ๋ฉ๋ด์ผ์ ๋์ค๋ ๊ด๋ฒ์ํ
doc.kldp.org