You cannot see this page without javascript.

make - 03 make의 사용

Programing 조회 수 246 추천 수 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
번호 제목 글쓴이 날짜 조회 수
349 Linux 라그나로크 LynX 2017-12-07 2338
348 Linux modsecurity LynX 2017-12-06 474
347 CentOS centos7 groonga install LynX 2017-12-04 581
346 CentOS CemtOS 7.3 base Trinitycore 3.3.5 Compile file LynX 2017-11-13 520
345 CentOS CentOS7 GCC-5.1.1 yum install LynX 2017-11-10 467
344 APM http 프로토콜 https 로 리다이렉션 LynX 2017-07-14 228
343 Programing make - 07 접미사 규칙 LynX 2017-02-22 1853
342 Programing make - 06 make 규칙 LynX 2017-02-22 242
341 Programing make - 05 내부 매크로 LynX 2017-02-22 896
340 Programing make - 04 매크로 file LynX 2017-02-22 239
» Programing make - 03 make의 사용 file LynX 2017-02-22 246
338 Programing make - 02 makefile file LynX 2017-02-22 335
337 Programing make - 01 make 란? file LynX 2017-02-22 610
336 LinuxMint Intel Linux Graphics Drivers Installer on Linux Mint file LynX 2017-02-20 349
335 Linux 리눅스 사용 기초 - 05 도움말 얻기 LynX 2017-02-17 221
334 Linux 리눅스 사용 기초 - 04 bash 셸 사용하기 LynX 2017-02-17 240
333 Linux 리눅스 사용 기초 - 03 vi 에디터 LynX 2017-02-17 221
332 Linux 리눅스 사용 기초 - 02 일반 명령어 사용법 익히기 LynX 2017-02-17 387
331 Linux 리눅스 사용 기초 - 01 명령어 구조와 명령어 쉽게 사용하기 LynX 2017-02-17 238
330 APM Apache httpd mod_security2 적용 file LynX 2017-02-09 962

XE Login