Make는 그 뜻에서 알 수 있듯이 무언가를 만들다 라는 뜻을 가진 동사이다. 우리가 사용하게 될 make는 GNU에서 만든 Gnu Make를 사용을 한다.

make는 하나의 프로그램 소스들을 컴파일 하며 새로이 바뀐 부분을 알아서 확인하여 새로 컴파일을 하도록 하여 사용자가 일일이 소스들을 컴파일 할때 거치는 번거로운 과정을 거치지 않도록 도와주는 것에 목적이 있다.

GNU make는 보통 GNUmakefile, Makefile, makefile 중에서 하나가 있으면 그 파일을 읽게 된다. 하지만 일반적으로 Makefile을 추천하게 되는데, 그 이유는 우선 GNUmakefile은 기존의 make에서 인식을 못한다는 단점이 있고, makefile은 보통 소스 파일에 묻혀서 잘 안보이게 되기 때문이다. - KDLP 임대영님의 GNU Make 강좌.

Gnu Make는 소스를 컴파일할 디렉토리에 있는 makefile의 존재를 확인하는데 이때 순서가 대문자로 이루어진 이름부터 소문자로만 이루어진 순서로 찾게 된다.

  • Make가 makefile를 찾는 우선 순위 
    • GNUmakefile    //    다른 make 와 호환이 안되기 때문에 사용하지 않는다.
    • Makefile    //    눈에 잘 띄고 소문자보다 우선순위가 높으므로 이것을 애용하도록 하자.
    • makefile    //    Makefile 과 더불어 쉽게 볼 수 있는 makefile

프로그램을 개발하다 보면 Source file이 방대해지고 적절히 맞게 팀원들에게 배분할 필요가 있다. 그리고 이 Source 파일들은 서로 필요한 부분에서 의존하고 있는데 바뀐 함수를 이용하는 다른 파일도 새롭게 컴파일 되어야 한다. 이때 그 양이 많거나 헷갈리지 않게 하기 위해서라도 make는 필수적이다.

아래는 make와 make 파일을 어떻게 사용하는지 간단하게 적어두었다. 아래와 같은 makefile이 있다고 가정하고 main.c strcmp2.c strlen2.c 도 함께 있어야 한다.

CC = gcc    //    변수 처럼 선언해서 대입해서 쓰는 매크로.
OBJECTS = main.o strcmp2.o strlen2.o    //  모든 파일명을 다 적지 않기 위해서 하나의 매크로에 적어 둔다.

all: BEGIN $(OBJECTS)    //    형식은 레이블 명 : 의존성 걸린 파일명들.
	@$(CC) -o $(OBJECTS)    //    tab키로 반드시 들여쓰기를 해야한다.
	@echo Compilation is done.

BEGIN:
	@echo Compilation will start soon..

main.o: main.c
	@$(CC) -c main.c

strcmp2.o: strcmp2.c
	@$(CC) -c strcmp2.c

strlen2.o: strlen2.c
	@$(CC) -c strlen2.c
clean:
	@rm -rf $(OBJECTS)

사용은 make label 명 을 적어서 사용 할 수가 있다. 위의 makefile의 예를 들어서 사용해 보면,

 $ make all    //    makefile에 작성되어있는 all의 label을 실행하라 라는 명령어 일반적으로 컴파일을 시작하는 명령어 이며 make만 쳐도 make all을 찾는다.
$ make clean     //    makefile에 작성해 두었는 것 처럼 링크작업이 끝난 object 파일을 삭제한다. 


신고

'컴퓨터 언어 > C' 카테고리의 다른 글

문자열, 그것은 배열.  (2) 2012.06.11
Makefile을 작성하자.  (2) 2012.06.10
다수의 소스 컴파일을 도와줄 Make  (2) 2012.06.10
ASCII Code는?  (1) 2012.06.09
자료형  (1) 2012.06.09
어휘적 최소 단위 "토큰"  (1) 2012.06.08