make 널 확장자 규칙

OS/리눅스 & 유닉스 2011. 11. 24. 20:02
확장자 규칙
미리 정의해 놓은 일반화한 항목. 
간단히 말해서 파일의 확장자를 보고 그에 따라 적절한 연산을 수행시키는 규칙이라고 말할 수 있다. 가령 .c 파일은 일반적으로 C 소스 코드를 가리키며 .o 파일은 목적 파일을 말한다. 그리고 당연히 .c 파일이 컴파일되면 .o 파일이 만들어져야 한다. 

필요 항목이 몇몇 확장자 가운데 하나를 갖거나 사용자가 제공한 그 어떤 명시적인 명령도 가지고 있지 않을 경우, make는 적절한 확장자 규칙을 찾게 된다. 즉, program이 만들어지기 전에 필요 항목 리스트 가운데 어떤 항목이 먼저 만들어져야 하는지 확인한다.

.SUFFIXES : .c .o .s
.SUFFIXES 행은 make가 주의 깊게 처리할 파일들의 확장자를 등록해 준다고 이해하면 된다(중요하게 여길 확장자를 나타낸다).
위의 표현은 .c와 .o 그리고 .s 확장자를 가진 파일들을 확장자 규칙에 의거해서 처리될 수 있도록 해준다. 

.c :
    $(CC) $(CFLAGS) $< -o $@
.c 확장자의 파일로부터 널 확장자의 파일(실행 프로그램)을 만드는 방법을 설명한다(널 확장자가 .c와 콜론 사이에 있다고 생각). 이 규칙은 하나의 소스 파일에서 작성할 때 오브젝트 파일을 다루지 않도록 해준다.


.c.o :
    $(CC) $(CFLAGS) -c $<
이 규칙은 .c에서 .o파일을 만드는 방법을 설명하고 있다.

OBJS = main.o iodat.o dorun.o lo.o
LIB = /usr/proj/lib/crtn.a

program : ${OBJS} ${LIB}
    ${CC} -o $@ ${OBJS} ${LIB}
$ make program                    --> cc -o program main.o iodat.o dorun.o io.o /usr/proj/crtn.a

어떤 확장자에 대해 확장자 규칙이 정의되어 있더라도 .SUFFIXES 리스트에도 함께 정의되어야 효력이 있다. 
make는 .SUFFIXES 리스트의 확장자 순서에 따라 파일을 검색한다.
make는 현재의 작성에서 사용한 모든 변수와 확장자 규칙, 그리고 target을 출력하는 유용한 -p 옵션을 제공한다.

'OS > 리눅스 & 유닉스' 카테고리의 다른 글

공유 메모리  (0) 2011.11.30
/etc/inittab  (0) 2011.11.28
make 확장자 규칙  (0) 2011.11.24
make 관련 한글 메뉴얼 사이트  (0) 2011.11.24
dbx 명령  (0) 2011.11.24
: