Linux/Ubuntu

Makefile 예제

Ohjeonghak 2014. 7. 18. 13:44
반응형

Makefile을 작성 하기전 샘플 코드를 준비하도록 하겠다.


샘플 코드는 3개를 준비하도록 하자.

test.h / test.c / main.c


test.h

#ifndef _TEST_H_

#define _TEST_H_


#ifndef _STDIO_H_

#define _STDIO_H_ 

#include <stdio.h>

#endif


extern int i;

extern void HelloWorld(void); 

extern void setI(int n);

#endif


우선 헤더파일의 내용은 변수 i와 문자 및 변수 i를 출력하는 함수, 변수 i의 값을 변경하는 함수 3개를 선언한다.


*Tip.

참고로 헤더파일의 내용엔 전처리기문으로 헤더의 선언을 방지하도록 하는게 좋으며, #define 의 내용과 변수 선언, 함수 선언을 할수 있는데 변수는 초기화 하지 않고 선언만 해야된다.



test.c

#include "test.h"


int i;

void HelloWorld(void) 

       fprintf(stdout, "Hello world. %d\n", i); 

void setI(int n)

{

i = n;

}


test.c는 헤더파일에서 선언한 내용을 구현한다.

extern한 변수를 정의하고 함수 내용들을 구현해준다.



main.c

#include <stdio.h>

#include "test.h" 


int main(void) 

{

       setI(0);

       HelloWorld(); 

       setI(1000);

       HelloWorld(); 

 

      return 0; 

}


main.c의 내용은 간단하다 i의 값을 초기화 하고 출력하고 다시 반복하는것이다.


여기까지 3개의 샘플 파일이 준비가 되었다면 다음으로 Makefile을 만들 것이다.

참고로 3개의 파일은 같은 디렉토리에 존재해야지 예제를 돌려보고 확인 할 수 있다.



Makefile

#컴파일러

CC=gcc


#소스코드

SOURCES = main.c test.c


#목적파일로 컴파일을 자동으로 해준다.

#아래의 내용을 풀어쓰자면 다음과 같다

#gcc -c -o main.o main.c

#gcc -c -o test.o test.c

OBJECTS = ${SOURCES:.c=.o}


#make clean 명령을 쳤을때 make 명령으로 컴파일하고 생성된 파일들을 지우기 위해

#다음과 같이 RM이라는 변수에 rm -f 명령을 저장한다.

RM = rm -f


#OUT이라는 변수에 최종적인 결과물 (실행파일) 이름을 넣어준다.

OUT = mtest


#OUT 이라는 변수에 담긴 이름을 가진 결과물이 OBJECTS의 결과물로 만들어지는 내용이다.

#아래의 내용을 풀어쓰자면 다음과 같다

#gcc -o mtest main.o test. o test.h

$(OUT): $(OBJECTS)

$(CC) -o $(OUT) $(OBJECTS) $(LIBS) test.h


#아래는 make clean의 명령어 내용이다.

clean: 

$(RM) $(OUT) *.o




반응형