글
(1) 정의
- make는 파일 관리 유틸리티이다.
- 각 파일 간의 종속 관계를 파악해 기술 파일(Makefile)에 기술된 대로 컴파일 명령이나 셸(shell) 명령을 순차적으로 내린다.
- 각 파일에 대한 반복적 명령을 자동화시켜 개발자의 수고를 덜고, 시간을 절약할 수 있게 해준다.
(2) 기술파일(Makefile)의 작성
: 기술 파일의 파일명은 GNU make인 경우 GNUmakefile, makefile, Makefile 중 어떤 것도 사용할 수 있지만, 관습적으로 Makefile을 사용한다. 중복될 경우의 우선순위는 GNUmakefile, makefile, Makefile 순으로 기술 파일을 찾아 프로젝트 빌드에 사용된다.
1. 기술 파일의 기본 구조
CC = gcc // 매크로 정의 target : dependency1 dependency2 // 규칙 정의1 command1 // 명령1 command2 // 명령2 target2 : dependency3 dependency4 dependency5 // 규칙 정의2 command3 // 명령3 command4 // 명령4 |
- 매크로 정의 : 매크로를 기술 파일에서 사용하면 정의된 스트링으로 치환된다.
- 규칙 정의 : 타겟이 오고 콜론(:) 뒤에 그 타겟을 생성하기 위해 필요한 종속 항목들의 리스트가 온다.
보통 종속 항목에 속하는 파일들은 타겟을 빌드할 소스 파일이나 오브젝트 파일들이다.
- 명령 : 종속 항목이 충족된 상태에서 타겟을 생성하기 위한 명령 리스트이다.
타겟을 생성하기 위해 make는 나열된 명령을 위에서 아래로 순차적으로 수행한다.
2. 기술 파일 구문 작성 기본 규칙
1) 명령의 시작은 반드시 TAB으로 시작되어야 한다.
2) 비어 있는 행은 무시된다.
3) #을 만나면 개행 문자를 만날 때까지 무시한다.
4) 기술 행이 길어지면 '\'을 이용해 이을 수 있다.
5) ';'는 명령라인을 나눌 때 사용한다.
6) 종속 항목이 없는 타겟도 사용 가능하다.
7) 명령 부분에는 어떤 명령이 와도 상관없다.
(3) make의 기본 동작
1. Makefile의 내용
: diary라는 프로그램은 memo.c와 calendar.c, main.c 파일로 이루어져 있다.
이와 같이 Makefile을 작성하고 make 명령을 내리면 각 오브젝트에 대한 컴파일 명령을 수행한 후 최종적으로 diary 파일을 생성한다.
2. 동작 절차
- make 명령을 내리면 Makefile을 찾는다.
- Makefile 내에서 제일 처음 오는 타겟을 찾는다. (all)
- all 타겟을 만들기위해 종속 항목을 확인하고 diary 가 없음을 확인한다.
- diary를 생성하기 위해 (line3)을 접하고 diary를 생성하기 위한 첫번째 종속 항목 memo.o가 아직 만들어져 있지 않음을 확인한다.
- memo.o를 생성하기 위해 (line 6)을 접하고, memo.c가 현재 디렉토리에 있는것을 확인하면 (line 7) 명령라인을 수행한다.
- 다시 (line3)으로 돌아가 memo.o는 생성 되었지만, calendar.o는 아직 생성되지 않았음을 확인한다.
- memo.o를 생성하는 방법과 동일한 방법으로 calendar.o와 main.o를 생성한다.
- diary를 생성하기 위한 모든 종속항목이 충족되면 (line4) 명령라인을 수행하여 diary를 생성한다.
- 마지막으로 (line1)로 돌아가 all 타겟을 생성하기 위항 diary가 만들어진 것을 확인하고, 현재 all 타겟을 생성하기 위한 특별한 명령이 없으므로 make는 all 타겟이 생성되었다고 간주하고 정상적으로 종료한다.
- make clean은 해당하는 명령을 수행하여 이전 make 명령을 통해 생성된 .o 파일들을 삭제한다.
※ 현재 이전 make 명령으로 인해 memo.o가 이미 만들어져 있으면, make는 .o 파일의 생성 시간과 .c 파일의 최근 수정 시간을 비교해 다시 만들 필요가 있는지를 판단한다.
'L inux > Compile' 카테고리의 다른 글
리눅스 프로젝트 빌드(Make/Makefile) - 확장자 규칙의 사용 (0) | 2012.10.22 |
---|---|
리눅스 프로젝트 빌드(Make/Makefile) - 매크로의 사용 (1) | 2012.10.22 |
'__open_missing_mode' declared with attribute error - compile error (3) | 2012.03.22 |
컴파일(Compile)과정 - collect2에 의한 링킹 과정 (0) | 2012.03.22 |
컴파일(Compile)과정 - as에 의한 기계어 코드 생성 (0) | 2012.01.10 |
RECENT COMMENT