2015. 7. 27. 17:45
어느 정도 규모가 있는 프로젝트에서는 여러 컴파일 결과물들을 라이브러리 형태로 관리하는 것이 편할 때가 많다.
라이브러리는 목적 파일들을 하나로 합친 파일로, 관례적으로 .a라는 확장자(archive)를 가진다.
make 명령은 라이브러리를 편하게 관리할 수 있는 특별한 구문을 제공한다.
lib(file.o)라는 구문이 바로 그것인데, 이는 lib.a라는 라이브러리에 들어 있는 목적 파일 file.o를 지칭한다.
make에는 라이브러리 관리용 내장 규칙도 들어있다.
실제로 그 규칙을 풀어서 쓴다면 다음과 같다
.c.a:
$(CC) -c $(CFLAGS) $<
$(AR) $(ARFLAGS) $@ $*.o
이것은 .c 파일로부터 .a를 만들어내는 규칙이다.
보통의 경우 매크로 참조 $(AR)과 $(ARFLAGS)는 각각 ar과
옵션 rv로 확장된다. 따라서 이 규칙은
- 우선 소스 파일을 컴파일해서 목적 파일을 만들고,
- ar 명령을 이용해서 새 목적 파일을 라이브러리에 추가한다
이 규칙에는 여러 가지 특수 매크로들이 쓰이는데, 이들은 현재 시점에서의 해당 파일 이름들로 치환된다.
$< - 원본 이름
$@ - 대상 이름
$* - 접미어가 없는 이름