이지훈님의 블로그
MakeFile 튜토리얼 본문
우선 빌드할 c파일을 생성한다.
gcc option
-o |
output 파일 이름 지정 |
-c |
object 파일 생성 |
-I |
header file 위치 지정 -I<폴더이름> |
-l |
라이브러리 파일 지정 -l<파일이름> |
-L |
라이브러리 폴더 지정 -L<폴더이름> |
main.c
#includeint main() { printf("Hello World\n"); return 0; }
이 파일을 빌드하기 위해서는 다음의 gcc를 이용해 실행파일을 만들어야 한다.
gcc -c main.c gcc -o main.out main.o
gcc를 이용해 실행파일을 만들어야 한다.
이를 조금 매끄럽게 처리하는 Makefile을 생성한다.
Makefile
main.out : main.o gcc -o main.out main.o main.o : main.c gcc -c main.c
Makefile은 목표(target)가 되는 main.out이 있고, 전제조건(prerequisite)이 되는 main.o, 그리고 gcc -o main.out main.o 처럼 타겟을 만들 수 있도록 하는 방법(recipe)가 있다.
< Make Rule >
이제 main.c를 hello word를 출력하는 hello.c, hello.h로 파일을 분리하자.
main.c
#include "hello.h" int main() { HelloWorld(); return 0; }
hello.c
#includevoid HelloWorld() { printf("Hello World\n"); }
hello.h
void HelloWorld();
Makefile을 수정한다.
main.out : main.o hello.o gcc -o main.out main.o hello.o main.o : main.c gcc -c main.c hello.o : hello.c gcc -c hello.c
셀에서 ls를 실행하면 폴더가 복잡해진 것을 볼 수 있다. 이제 폴더를 조금 깔끔하게 정리해보자.
hello폴더를 생성하고 hello.c, hello.h를 이동시킨다.
그리고 object 파일들을 생성할 hello폴더와 라이브러리를 가지고 있는 lib폴더를 생성한다.
ROOT_DIR:=$(PWD) HELLO_DIR=$(ROOT_DIR)/hello OBJ_DIR=$(ROOT_DIR)/object LIB_DIR=$(ROOT_DIR)/lib main.out : main.o hello.o hello.a gcc -o main.out main.o $(LIB_DIR)/hello.a main.o : main.c gcc -c main.c -o main.o -I$(HELLO_DIR) hello.a : hello.o ar rc $(LIB_DIR)/hello.a $(OBJ_DIR)/hello.o hello.o : $(HELLO_DIR)/hello.c gcc -c $(HELLO_DIR)/hello.c -o $(OBJ_DIR)/hello.o
Comments