1. basic makefile structure syntax

Program Lang./Makefile 2013. 5. 11. 15:35

1. makefile란

 

make 유틸리티는 소스간에 dependency와 timestamp 관계를 이용하여 빌드를 자동으로 해주는 유틸리티이다.

이 유틸리티에서 사용하는 자동 스크립터가 makefile이다.

 

$ make [Target]                       /* -C 옵션 : 스크립트가 위치한 디렉토리 지정, -f 옵션 : 기본 이외의 파일 지정 */

 

쉘에서 위처럼 make 명령어를 수행하면 기본값으로 현재 디렉토리에서

makefile, Makefile 또는 GNUMakefile 의 이름을 갖는 자동 스크립트 파일이 존재하는지 검사하여 실행한다.

 

만약 기본값을 바꾸고 싶으면 옵션을 이용하여 변경할 수 있다.

 

2. makefile 기본 구조

 

makefile은 아래와 같이 Target, Prerequisite, Command의 묶음으로 이루어져 있고, 이를 Rule이라고 한다.

Rule의 동작은 Target을 생성하기 위해서 Command를 수행한다. Command를 수행하기 전에 먼저 Prequisite의 

존재 여부나 변경 여부를 검사한다. 만약 Prerequisite가 존재하지 않거나 변경이 있으면 Prerequisite를 만드는

Rule 찾아서 먼저 수행한다. Prerequisite를 만드는 Rule또한 아래와 같은 기본 구조로 이루어져 있다.

 

하나의 Rule에는 아래와 같이 Target. Prerequisite, Command가 여러개로 구성될 수 있다.

이 경우에는 각 Target은 동일한 Prerequisite와 Command 동작을 수행함을 알 수 있다.  

 

[상기 사항] Command 영역은 쉘상에서 수행되며, 실제 명령어 수행은 새로운 쉘인 Sub-Shell에서 수행한다.  

 

Target1 Target2 Target3 : Prerequisite1 Prerequisite2

[ tab ] command1                                                                                /* Shell Command 영역 */

[ tab ] command2 

 

3. 용어 정리

 

  • Default Rule

 

- makefile가 Rule의 집합으로 이루어져 있다. 가장 최상위에 존재하는 Rule을 Default Rule이라 한다.

 

  • Default Target

 

- make 명령어를 쉘상에서 실행 시, Target를 지정하지 않으면 스크립트 상의 최상위 Target이 실행된다.

  이를 Default Target이라고 한다.

 

4. 예제

 

exam1.zip

 

예제 파일은 makefile의 Rule의 기본 구조와 의존관계처리를 어떻게 처리하는지 정도만 알아보는 구조이다.

main.c파일은 실제 실행코드가 들어있고 bar.c와 foo.c 파일을 단순히 자신의 이름을 출력하는 함수를 가지고 있다.

더 형식적이고 일반적인 구조는 더 진행하면서 알아보도록 한다.

 

#***********************************************************************#
# ----------------------------------------------------------------------
#  Copyright(c) 2012-2013 by hee-soon kim 
#
# All rights are reserved
# 
# ----------------------------------------------------------------------#
#
#  FILE NAME    : Makefile
#  VERSION      : 1.0
#  AUTHOR       : heesoon,kim(김희순), chipmaker.tistory.com)
#  DATE         : 2012/12/21
#
#***********************************************************************#

exec : bar.o foo.o main.o
	gcc -o exec bar.o foo.o main.o

#bar.o : bar.c
bar.o : bar.h bar.c
	gcc -c bar.c

foo.o : foo.h foo.c
	gcc -c foo.c	
	
main.o : bar.o foo.o
	gcc -c main.c

clean :
	rm -rf *.o *.exe


위 예제에서 bar.o Target를 생성하는 Rule에서 bar.h 파일이 Prerequisite에 존재하지 않게하고

bar.h을 수정하였을 경우, make 동작은 할 일이 없다는 메세지를 출력한다. 즉 헤더파일도 의존관계에 포함시켜야

한다는 것이다. 이에 대한 자세한 내용은 앞으로 알아볼 것이다.  

 

5. 마무리

 

이 장에서 중요한 것은 기본적인 용어와 makefile의 구조이다. Rule에 대한 정의를 이해하는 것이 중요하다.

 

6. reference

 

● GNU make 문서

http://www.gnu.org/software/make/manual/make.html


● GNU make 한글판 버전

     http://www.viper.pe.kr/docs/make-ko/make-ko_toc.html


● 참고 사이트

http://wiki.kldp.org/KoreanDoc/html/GNU-Make/GNU-Make.html
http://wiki.kldp.org/KoreanDoc/html/gcc_and_make/gcc_and_make-3.html

 

● OREILLY Open Book

http://oreilly.com/catalog/make3/book/

 

'Program Lang. > Makefile' 카테고리의 다른 글

6. source와 object 분리  (0) 2013.05.13
5. Makefile Rules  (0) 2013.05.13
3. VPATH(vpath), conditional and include 지시자  (0) 2013.05.09
4. variable and macros  (0) 2013.05.09
9. makefile structure for large project  (0) 2012.12.27
: