make 확장자 규칙
OS/리눅스 & 유닉스 2011. 11. 24. 17:26확장자 규칙은 확장자가 같은 여러개의 파일에 똑같은 규칙을 적용하고 싶을 때
유용하게 쓰이는 방법입니다.
어떤 프로젝트에 c 파일이 여러개 있다고 가정해봅시다. 그리고 이것을 컴파일 하는
다음과 같은 makefile이 있다고 생각해봅시다.
그냥 Makefile)
example : main.o read.o write.o handle.o
gcc -o example main.o read.o write.o handle.o
main.o : main.c
gcc -c main.c -o main.o
read.o : read.c
gcc -c read.c -o read.o
write.o : write.c
gcc -c write.c -o write.o
handle.o : handle.c
gcc -c handle.c -o handle.o
이 Makefile을 이용해 쉘에서 make example명령을 내리면 example라는 실행파일이 생기겠죠?
그런데, 가만히 보니 밑의 object파일을 만들어주는 부분은 파일이름만 다르고
다 동일한 모양을 하고 있습니다. 그렇습니다. 프로그래머라는 사람들은 이런 귀찮은
짓을 그냥 놔둘리가 없습니다.
다음은 확장자 규칙을 이용하여 다시 만들어본 Makefile 예제입니다.
확장자 규칙을 이용한 향상된 Makefile)
.SUFFIXES : .c .o
example : make.o read.o write.o handle.o
gcc -o example make.o read.o write.o handle.o
.c.o :
gcc -c $< -o $@
main.o : main.c
read.o : read.c
write.o : write.c
handle.o : handle.c
새로 추가된 부분을 설명해보겠습니다.
.SUFFIXES : .c .o
이 부분은 .c와 .o 확장자를 가진 파일들에 대해서 특별히 처리할 것이다 라는 것을 알려주는 부분입니다. 별로 신경쓸 것 없습니다. 그냥 그런가보다 하면 됩니다.
.c.o :
gcc -c $< -o $@
바로 이곳이 문제의 핵심입니다. 이게 무슨 소리냐 하면, .c 파일을 이용해서 .o 파일을 만들 수 있고, 아랫줄에 있는 명령을 이용해서 만든다는 얘기입니다. 즉 어떤 .o 파일이 필요할 경우 이 규칙에 의해서 해당 .c파일을 찾고 아랫줄의 명령을 실행시켜서 .o파일을 생성해 내는 것입니다.
아래 명령(gcc -c $< -o $@)을 잠깐 설명하면, 목표파일(.o)보다 소스파일(.c)이 더 최근에 갱신된 모든 파일($<)을 컴파일해서 목표파일($@)을 만든다고 되어있습니다.
이제 make example라는 명령을 입력하면 무슨 일이 벌어지는지 이해하실 수 있을 것입니다.
example를 만들려면 make.o read.o write.o handle.o 가 있어야되고, .c.o 확장자 규칙에 의해 make.o는 make.c를, read.o는 read.c를, write.o는 write.c를, handle.o는 handle.c를 이용하여 만들어 집니다. 목표 파일(.o)들이 확장자 규칙(.c.o)에 의해 다 만들어지면 이 목표파일들을 이용하여 마지막으로 example라는 실행파일을 생성합니다.
'OS > 리눅스 & 유닉스' 카테고리의 다른 글
/etc/inittab (0) | 2011.11.28 |
---|---|
make 널 확장자 규칙 (0) | 2011.11.24 |
make 관련 한글 메뉴얼 사이트 (0) | 2011.11.24 |
dbx 명령 (0) | 2011.11.24 |
find 03 (0) | 2011.11.24 |