Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

이지훈님의 블로그

MakeFile 튜토리얼 본문

ARMv8 Embedded

MakeFile 튜토리얼

개발자입니다. 2018. 8. 28. 22:35


우선 빌드할 c파일을 생성한다.


gcc option


  -o 

  output 파일 이름 지정

  -c

  object 파일 생성

  -I 

  header file 위치 지정 -I<폴더이름>

  -l 

  라이브러리  파일 지정 -l<파일이름>

  -L 

  라이브러리 폴더 지정 -L<폴더이름> 




main.c

#include 
int 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 >

< Make Rule Example >


이제  main.c를 hello word를 출력하는 hello.c, hello.h로 파일을 분리하자.


main.c


#include "hello.h" 
int main() {
    HelloWorld();
    return 0;
}


hello.c 

#include 
    void 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