목표
Level : 2 학습 목표 : 변수(Variables)를 사용할 수 있다. --------- < 문제 > .c 파일들을 .o 파일로 컴파일한 뒤, ft라는 이름의 정적라이브러리 파일(libft.a)로 만드시오. < 제한 사항 > - Rule을 변수만으로 작성하시오. - 적절한 변수를 할당하시오. - ar 유틸리티를 사용하여 archive 하시오. - 리링크되지 않아야 합니다.
코드
NAME := libft.a
SRCS := first.c second.c third.c
OBJS := first.o second.o third.o
AR := ar
ARFLAGS := -rc
$(NAME) : $(OBJS)
$(AR) $(ARFLAGS) $(NAME) $(OBJS)
설명
NAME := libft.a: 생성할 정적 라이브러리의 이름을 NAME 변수에 할당합니다. 이 예제에서는 libft.a라는 이름의 정적 라이브러리를 생성합니다.
SRCS := first.c second.c third.c: 컴파일할 소스 파일들의 목록을 SRCS 변수에 할당합니다.
OBJS := first.o second.o third.o: 컴파일된 오브젝트 파일들의 목록을 OBJS 변수에 할당합니다.
AR := ar: 아카이브 유틸리티의 이름을 AR 변수에 할당합니다. 일반적으로 Unix/Linux 시스템에서는 ar이 사용됩니다.
ARFLAGS := -rc: ar 명령어에 전달할 플래그를 ARFLAGS 변수에 할당합니다. -rc는 새로운 오브젝트 파일을 추가하거나 기존의 것을 교체하고, 필요한 경우 새로운 아카이브를 생성하는 옵션입니다.
룰과 명령어
$(NAME) : $(OBJS): 이 룰은 $(NAME) (여기서는 libft.a)라는 target이 $(OBJS) (여기서는 first.o, second.o, third.o)라는 dependency을 가진다고 명시합니다.
$(AR) $(ARFLAGS) $(NAME) $(OBJS): 이 명령어는 ar -rc libft.a first.o second.o third.o와 동일하게 작동합니다. 여기서는 변수를 사용하여 명령어를 추상화했습니다.