ft_printf 과제의 경우 Makefile
을 이용해 정적 라이브러리 파일을 만들고, 라이브러리 파일과 함께 main.c
파일을 컴파일해야 한다.
Makefile
생성방법과는 약간 다르다.libft
의 make 파일과 그 경로를 불러오는 코드를 적어야 한다. ${NAME}: ${OBJS} $(call libft_call, all)
: 이런 식으로, call
을 사용하여 libft 폴더안에 있는 함수를 불러와야 한다.
SRCS = ft_printf.c
SRCS_B =
OBJS = ${SRCS:.c=.o}
OBJS_B = ${SRCS_B:.c=.o}
NAME = libftprintf.a
RM = rm -f
AR = ar rc
define libft_call
cd libft && $(MAKE) $(1) && cd ..
endef
.c.o:
gcc -Wall -Wextra -Werror -c $< -o ${<:.c=.o}
all: ${NAME}
${NAME}: ${OBJS}
$(call libft_call, all)
${AR} ${NAME} ${OBJS}
bonus: ${OBJS_B}
$(call libft_call, all)
${AR} ${NAME} ${OBJS_B}
clean:
$(call libft_call, clean)
${RM} ${OBJS} ${OBJS_B}
fclean: clean
$(call libft_call, fclean)
${RM} ${NAME}
re: fclean all
.PHONY: all bonus clean fclean re
libft 함수를 포함하여 함께 컴파일을 할때는 하기와 같이 컴파일한다.
gcc -Wall -Wextra -Werror -L. -lftprintf -Llibft -lft ft_printf.c
L
(대문자) : 외부 라이브러리를 사용한다는 의미. 라이브러리의 위치를 정해주는 옵션.L 뒤에 붙은 .
: 사용할 외부 라이브러리의 경로 (붙여서 씀)l (소문자)
: 링크할 라이브러리 파일을 지정한다. 예를 들어 lftprintf
로 사용할 외부 라이브러리의 파일명을 지정 할 수 있는데, 이렇게 하면 **lib**ftpritnf.**a**
파일을 사용한다.