MakeFile 만드는법

컴파일 예제

파일 개요

a.c (a.h), b.c (b.h), main.c 파일 생성

파일 코드 내용

a.c, a.h, b.c, b.h, main.c 파일 내용은 아래와 같다.

// a.c
#include 

void foo()
{
    printf("foo\n");
}
// a.h
void foo();
// b.c
#include 

void bar()
{
    printf("bar\n");
}
// b.h
void bar();
// main.c
#include "a.h"
#include "b.h"

int main()
{
    foo();
    bar();

    return 0;
}

컴파일 하기

object 파일 생성

$ gcc -c -o a.o a.c
$ gcc -c -o b.o b.c
$ gcc -c -o main.o main.c

→ -c 는 컴파일, 어셈블 수행, -o 는 파일명을 정하는 옵션임

Makefile 만들기

Makefile 구조

Makefile 은 목표(Target), 의존 관계(Dependency), 명령(command)의 세가지로 이뤄짐

target ... : dependency ...
(tab)command1
(tab)command2

Makefile 작성

exefile : a.o b.o main.o
    gcc -o exefile a.o b.o main.o

a.o : a.c
    gcc -c -o a.o a.c

b.o : b.c
    gcc -c -o b.o b.c

main.o : main.c
    gcc -c -o main.o main.c

clean:
    rm *.o exefile

→ vi Makefile 후 위 내용을 입력

Makefile 실행

$ ls
a.c  a.h  b.c  b.h  main.c  Makefile
$ make
gcc -c -o a.o a.c
gcc -c -o b.o b.c
gcc -c -o main.o main.c
gcc -o exefile a.o b.o main.o
$ ls
a.c  a.h  a.o  b.c  b.h  b.o  exefile  main.c  main.o  Makefile

→ 실행 파일인 exefile 이 make 명령을 통해 새로 생성된 것을 알 수 있다.

실행

$ ./exefile
foo
bar

make clean

$ make clean
rm *.o exefile
$ ls
a.c  a.h  b.c  b.h  main.c  Makefile

→ make clean 명령으로 확장자가 o 인 파일과 exefile 이 삭제된 것을 확인 할 수 있다.

Makefile 간단히 만들기

CC=gcc
TARGET=exefile
OBJECT=a.o b.o main.o

$(TARGET) : $(OBJECT)
    $(CC) -o $(TARGET) a.o b.o main.o

a.o : a.c
    $(CC) -c -o a.o a.c

b.o : b.c
    $(CC) -c -o b.o b.c

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

clean:
    rm $(OBJECT) $(TARGET)

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

10 − 1 =