강좌
클라우드/리눅스에 관한 강좌입니다.
프로그램 분류

리눅스의 어플리케이션 컴파일을 위한 make 사용법

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

리눅스의 어플리케이션 컴파일을 위한 make 사용법

 

 

 

 

 

 

gcc컴파일러를 이용하여 Makefile이라는 컴파일스펙파일에 지정된 대로 작업하는 것이 바로 make라는 것이다.

 

 

 

 

gcc로 컴파일작업을 직접 하나씩 수행할 때에 이에 필요한 많은 옵션들을 직접 지정해야하는 어려움이 있다.

 

 

 

 

하지만 이러한 컴파일에 필요한 여러가지 옵션들과 설정사항들을 모두 저장해 둔 것이 Makefile이다.

 

 

 

 

여기서 설명하는 make를 이용하면 이런 일련의 과정들을 Makefile이라는 컴파일스팩파일”(필자가 임의대로 붙인 이름)에 작성된 순서대로 컴파일을 수행하게 된다.

 

 

 

 

즉 컴파일을 쉽게 할 수 있도록 도와주는 유틸리티라고 할 수 있다.

 

 

 

 

흔히 아파치(Apache) MySQL등과 같은 어플리케이션들을 리눅스 서버에 직접 설치할 때에 make명령어를 사용하는 것을 많이 보았을 것이다.

 

 

 

 

make명령어를 실행하면 현재 디렉토리에 있는 Makefile을 찾아서 Makefile파일 내에있는 각 행들을 순서대로 하나씩 gcc컴파일과 관련 작업들을 수행하게 된다.

 

참고로 알아두어야 할 것은 make에 꼭 필요한 Makefile 파일은 다음과 같이 3부분으로 구성되어있다.

 

 

 

 

 

 

target : dependency
          command
          .....
          .....

 

위의 구성에서 target부분은 목표부분으로서 컴파일이 수행된 후에 완료되어 생성될 오브젝트파일(목적파일, object file)이름을 지정한다.

 

 

 

 

 


그리고 command(명령)부분은 실행될 명령어가 순차적으로 입력되어있는 부분이다.

 

 

 

 

그리고 dependency부분은 의존관계부분이다.

 

 

 

 

 

 

다음은 간단한 gdchart프로그램을 컴파일하기 위한 makefile의 예이다.

 

 

 

 

비교적 간단한 예이지만 Apache MySQL과 같은 어플리케이션에서의 Makefile은 상당히 복잡하게 구성되어 있다.

 

 

 

 

 

 

[root@sulinux gdchart0.94b]# cat makefile

GDC_INCL = .

GD_INCL  = gd1.3

GD_LIB   = gd1.3

 

CC=gcc

 

all: gdc_samp1 gdc_samp2 gdc_pie_samp

 

# compile the samples

gdc_samp1: gdc.o gdchart.o price_conv.o gdc_samp1.o $(GD_LIB)/libgd.a

        $(CC) -o gdc_samp1 gdc.o gdchart.o price_conv.o gdc_samp1.o -L$(GD_LIB) -lgd -lm

 

gdc_samp1.o: $(GDC_INCL)/gdc.h $(GDC_INCL)/gdchart.h gdc_samp1.c

        $(CC) -I$(GDC_INCL) -c gdc_samp1.c

 

gdc_samp2: gdc.o gdchart.o price_conv.o gdc_samp2.o $(GD_LIB)/libgd.a

        $(CC) -o gdc_samp2 gdc.o gdchart.o price_conv.o gdc_samp2.o -L$(GD_LIB) -lgd -lm

 

gdc_samp2.o: $(GDC_INCL)/gdc.h $(GDC_INCL)/gdchart.h gdc_samp2.c

        $(CC) -I$(GDC_INCL) -c gdc_samp2.c

 

gdc_pie_samp: gdc.o gdc_pie.o price_conv.o gdc_pie_samp.o $(GD_LIB)/libgd.a

        $(CC) -o gdc_pie_samp gdc.o gdc_pie.o price_conv.o gdc_pie_samp.o -L$(GD_LIB) -lgd -lm

 

gdc_pie_samp.o: $(GDC_INCL)/gdc.h $(GDC_INCL)/gdcpie.h gdc_pie_samp.c

        $(CC) -I$(GDC_INCL) -c gdc_pie_samp.c

 

# --- compile the lib ---

price_conv.o: price_conv.c

        $(CC) -c price_conv.c

 

gdc.o: gdc.c gdc.h

        $(CC) -I$(GD_INCL) -I$(GDC_INCL) -c gdc.c

 

gdc_pie.o: $(GDC_INCL)/gdc.h $(GDC_INCL)/gdcpie.h gdc_pie.c

        $(CC) -I$(GD_INCL) -I$(GDC_INCL) -c gdc_pie.c

 

gdchart.o: $(GDC_INCL)/gdc.h $(GDC_INCL)/gdchart.h gdchart.c

        $(CC) -I$(GD_INCL) -I$(GDC_INCL) -c gdchart.c

 

$(GD_LIB)/libgd.a:

        cd $(GD_LIB) ; make -f Makefile libgd.a

 

# --- clean ---

clean:

        rm -f *.o gdc_samp1 gdc_samp2 gdc_pie_samp

        cd $(GD_LIB) ; make -f Makefile clean

 

[root@sulinux gdchart0.94b]#



 

 

makefile이 위와 같을 경우에 make를 실행하면 makefile에 작성되어있는 내용을 참고하여 직접 컴파일하게 된다.

 

 

 

 

즉 아래는 make파일을 실행한 것이다.

 

 

 

 

 

 

[root@sulinux gdchart0.94b]# make

gcc -Igd1.3 -I. -c gdc.c

gcc -Igd1.3 -I. -c gdchart.c

gcc -c price_conv.c

gcc -I. -c gdc_samp1.c

cd gd1.3 ; make -f Makefile libgd.a

make[1]: Entering directory `/usr/local/gdchart0.94b/gd1.3'

gcc  -O   -c -o gd.o gd.c

gcc  -O   -c -o gdfontt.o gdfontt.c

gcc  -O   -c -o gdfonts.o gdfonts.c

gcc  -O   -c -o gdfontmb.o gdfontmb.c

gcc  -O   -c -o gdfontl.o gdfontl.c

gcc  -O   -c -o gdfontg.o gdfontg.c

rm -f libgd.a

ar rc libgd.a gd.o gdfontt.o gdfonts.o gdfontmb.o \

        gdfontl.o gdfontg.o

make[1]: Leaving directory `/usr/local/gdchart0.94b/gd1.3'

gcc -o gdc_samp1 gdc.o gdchart.o price_conv.o gdc_samp1.o -Lgd1.3 -lgd -lm

gcc -I. -c gdc_samp2.c

gcc -o gdc_samp2 gdc.o gdchart.o price_conv.o gdc_samp2.o -Lgd1.3 -lgd -lm

gcc -Igd1.3 -I. -c gdc_pie.c

gdc_pie.c: In function `pie_gif':

gdc_pie.c:584: warning: deprecated use of label at end of compound statement

gcc -I. -c gdc_pie_samp.c

gcc -o gdc_pie_samp gdc.o gdc_pie.o price_conv.o gdc_pie_samp.o -Lgd1.3 -lgd -lm

[root@sulinux gdchart0.94b]#



 

 

앞에서 설명 드린 make의 실행은 옵션 없이 간단히 실행할 수 있다.

 

 

 

 

 make명령어에는 굉장히 많은 옵션들이 있다.

 

 

 

 

이들 옵션들의 내용을 하나씩 모두 살펴보는 것도 물론 중요하겠지만 실무에서 사용되는 방법과 용도에 대해서 보다 명확하게 확인하는 것이 보다 중요할 것이다.

 

 

 

 

 

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,156 명
  • 현재 강좌수 :  36,490 개
  • 현재 접속자 :  288 명