๐Ÿฐ42์„œ์šธ/libft

[42์„œ์šธ] libft ์ •๋ฆฌ : ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ Makefile

๊น€์ฅฐ00 2022. 2. 11. 15:53

๐Ÿ“Œ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