Programming - Understanding Makefile
Makefile
Makefile
반복되는 컴파일 작업의 시간을 줄이기 위해 수정된 파일만 컴파일 할 수 있게 함
대규모 프로젝트, 공동 프로젝트에서 반드시 필요
Compile과정
-
- 소스파일 .c
- 개발자가 이해할 수 있는 프로그래밍 언어로 이루어진 파일
- .c / .cpp 파일
- 소스파일 .c
-
- 목적파일 .o
- 소스파일을 컴파일러가 기계어로 변환한 파일
- .c 파일을 .o파일로 바꾸는 과정을 컴파일한다고함
- 컴파일러에 의해서 오브젝트 코드로 저장된 파일은 기계어 (Binary) 코드로 변환되어있음
- 목적파일 .o
-
- 실행 파일 a.out
- 기계어로 이루어진 목적파일(.o)에 라이브러리 파일(.a)을 Linking 해서 만든 실행 파일
- unix (a.out)
- window (a.exe)
- 실행 파일 a.out
Makefile
TARGET : DEPENDENCY
command
- TARGET 을 만드려면 DEPENDENCY가 필요함
- tab +command : command명령을 입력하면 TARGET을 만들 수 있음
~$ vi Makefile
CC = gcc
TARGET = app.out
OBJS = main.o kor.o usa.o
CFLAGS = -Wall
LDFLAGS = -lc
all : $(TARGET)
$(TARGET) : $(OBJS)
$(CC) $(LDFLAGS) -o $@ $^
.c.o :
$(CC) $(CFLAGS) -c -o $@ $<
/------------------
main.o :
$(CC) -c main.c
kor.o :
$(CC) -c kor.c
usa.o :
$(CC) -c usa.c
-
all 옵션이 없는 경우 제일 첫번째 Target 만 실행시키고 종료
$@
: TARGET$^
: DEPENDENCY$<
: TARGET 을 .c라는 source file로 잡아주겠다CFLAGS
: compile option- w : warning
- wall : all warning
LDFLAGS
: Linking option- lc : c library
~$ make
gcc -c main.c
gcc -c kor.c
gcc -c usa.c
gcc -o app.out main.o kor.o usa.o
~$