You cannot see this page without javascript.

make - 03 make의 사용

Programing 조회 수 255 추천 수 0 2017.02.22 17:11:28

$  make [-f  makeFileName]

 

보통 default로 makefile이라는 이름을 쓴다.

 

make

make는 서로 의존 관계가 있는 여러 파일로 이루어진 프로그램에서 효과를 볼 수 있음으로 다음과 같은 파일을 작성한다.
main_test.c는 fcun1.c와 func2.c.의 함수를 사용하고 모든 .c파일은 io.h를 include하는 프로그램이 있다고 하자.

 

① 소스파일 작성

io.h   <파일 1>
1: #ifndef __IO_H__
2:    #define __IO_H__
3:    #include <stdio.h>
4: #endif

 

main_test.c   <파일 2>
1: #include "io.h"
2:
3: int main(void)
4: {
5:     printf("main start..\n");
6:     func1();
7:     func2();
8:     printf("main end..\n");9: }

 

func1.c   <파일 3>
1: #include "io.h"
2:
3: void func1(void)
4: {
5:     printf("func1 start..\n");
6:     printf("func1 end..\n");7: }

 

func2.c   <파일 4>
1: #include "io.h"
2:
3: void func2(void)
4: {
5:     printf("func2 start..\n");
6:     printf("func2 end..\n");7: }

 

 

② makefile 작성

makefile   <makefile 작성>
1: test : main_test.o func1.o func2.o
2:    cc -o test main_test.o func1.o func2.o
3: main_test.o : io.h main_test.c
4:    cc -c main_test.c
5: func1.o : io.h func1.c
6:    cc -c func1.c
7: func2.o: io.h func2.c
8:    cc -c func2.c

 

컴파일을 할 명령의 시작 부분을 TAB으로 시작함을 주의한다.

 

③ make 실행

$  make
        cc -c main_test.c
        cc -c func1.c
        cc -c func2.c
        cc -o test main_test.o func1.o func2.o

make의 실행과정을 보면 makefile의 순서대로 컴파일하지 않음을 알 수 있다. 즉 make가 makefile에서 가장 먼저 실행하는 명령은 의존 관계 트리에서 가장 하위 대상에 속한 명령이 된다.

 

003.png

 

 

③의 가장 하위에 있는 main_test.c, func1.c, func2.c io.h는 의존되는 파일일 뿐 대상이 아니며, 가장 하위 대상인 ②의 main_test.o, func1.o, func2.o 이므로 여기에 속한 명령이 가장 먼저 실행된다. 또한 main_test.o, func1.o, func2.o는 test가 의존하는 파일이기도 하다.
생성된 test파일을 실행해 보자.
$  ./test
main start..
func1 start..
func1 end..
func2 start..
func2 end..
main end..

 

④ 특정 파일 수정
만약 어느 특정 파일이 수정되었다면 그 파일과 의존적인 관계가 있는 파일은 다시 컴파일 될 것이다.

$  touch func1.c
$  make
        cc -c func1.c
        cc -o test main_test.o func1.o func2.o

func1만 수정되었으므로 func1.o를 새로 생성하게 되면 test는 func1.o에 의존하므로 test도 새롭게 생성될 것이다.
만약 수정된 파일이 없는 상태에서 make를 실행하면 다음과 같이 make는 실행되지 않는다.

$  make
`test'은(는) 최신 것입니다.

 

⑤ 레이블 대상
make 파일의 대상에는 실행파일과 오브젝트 파일뿐만 아니라 사용자가 임의로 정한 레이블 이름이 올 수 있다. 레이블 이름은 실제 파일에 대응하지 않기 때문에 가짜 대상이라도 부르며, 이런 레이블 대상은 사용자가 원할 때 make 가 특정 명령을 실행하도록 하기 위함이다. 그리고 레이블 대상은 의존성을 갖지 않으므로 레이블을 만날 때마다 대상이 항상 최신으로 업데이트된 상태로 간주한다.

 

makefile  <makefile 작성>
1: test : main_test.o func1.o func2.o
2:    cc -o test main_test.o func1.o func2.o
3: main_test.o : io.h main_test.c
4:    cc -c main_test.c
5: func1.o : io.h func1.c
6:    cc -c func1.c
7: func2.o: io.h func2.c
8:    cc -c func2.c
9: clean :  ------------------> 레이블 대상
10:    rm main_test.o func1.o func2.o

 

$  make clean -> 가짜 대상을 실행한다.(특정 대상만 실행한다)
  rm main_test.o func1.o func2.o

 

첨부
엮인글 :
List of Articles
번호 제목 글쓴이 날짜sort 조회 수
369 Windows7 OEM을 활용하여 클린설치 file [11] LynX 2010-11-06 765
368 Windows7 에서 시스템을 백업/복원하는 가장 쉬운 방법!! file LynX 2010-11-07 334
367 탐색기 메뉴에 '명령 프롬프트 열기'와 '메모장으로 열기' 추가하기 file [14] LynX 2010-11-08 591
366 인터넷 익스플로러 리플레쉬 file LynX 2011-05-02 286
365 활성 네트워크 중복으로 인한 인터넷 연결 안되는 문제 file [12] LynX 2011-05-26 971
364 32bit Driver을 64bi로 설치하기 [8] LynX 2011-06-21 325
363 설치파일(inf)에 대한 이해 [7] LynX 2011-06-22 598
362 inf 설치시 경고창 안뜨게 하기 file [10] LynX 2011-06-22 430
361 로우 포맷(Low level format, 저수준 포맷) 하기 file [11] LynX 2011-07-06 722
360 Win XP Crack file [8] LynX 2011-10-31 269
359 윈도우7 메모리 인식 문재 file [13] LynX 2011-11-30 530
358 RoundCube 첨부 용량 변경 / 한글 수정 [10] LynX 2012-01-31 836
357 윈도우7 알수없는장치 file [8] LynX 2012-03-13 270
356 디지털 서명 file [1] LynX 2012-03-15 445
355 아레한글 사용시 출력물에 음영이 나타나는 현상. file [11] LynX 2012-03-29 1154
354 Xyview DVR서버 연결 [8] LynX 2012-04-19 295
353 HP Officejet 6500A (Plus) 호환 드라이버 [8] LynX 2012-05-16 294
352 IIS에 FastCgi모듈 활성화 시키기 file [12] LynX 2012-11-21 1283
351 윈도우 2008서버에 XE 설치 절차 [9] LynX 2012-11-22 230
350 Windows Server 2012 설치 file LynX 2012-11-23 477

XE Login