make 를 사용하여 컴파일 할 때 object파일들을 특정 폴더에 생성하도록 하고 싶은 경우 VPATH를 사용하면 쉽게 makefile를 구현 할 수 있다.

예를 들면 src 폴더에는 소스만 inc 풀더는 헤더 파일이 있고 컴파일 된 오브젝트 파일들을 obj 폴더에 넣고 싶은 경우 다음과 같이 makefile를 만들어 주면 된다.


CC=arm-none-eabi-gcc
OUT_DIR = ./obj
SRC_DIR=./src
INC_DIR=./inc
VPATH = $(SRC_DIR)
CFLAGS =  -I./inc
SRCS=$(wildcard $(SRC_DIR)/*.c )
OBJS=$(patsubst %.c, %.o, $(notdir $(SRCS)))
OUT_OBJS = $(patsubst %, $(OUT_DIR)/%, $(OBJS))
all: target
target : $(OUT_OBJS) Makefile
 $(CC) -o target $(OUT_OBJS)
$(OUT_DIR)/%.o: %.c
 $(CC) -c $(CFLAGS) $< -o $@
debug :
 @echo SRCS=$(SRCS)
 @echo OBJS=$(OBJS)
 @echo OUT_OBJS=$(OUT_OBJS)

src 폴더에 main.c와 test.c 가 있고 inc 폴더에 test.h 가 있는 경우
make 하면 다음과 같이 컴파일 된다.
D:tempmake_test>make
arm-none-eabi-gcc -c -I./inc ./src/main.c -o obj/main.o
arm-none-eabi-gcc -c -I./inc ./src/test.c -o obj/test.o
arm-none-eabi-gcc -o target  ./obj/main.o  ./obj/test.o

각 단계에서 Makefile에 정의된 변수의 값은 다음과 같다.
D:tempmake_test>make debug
SRCS=./src/main.c ./src/test.c
OBJS= main.o  test.o
OUT_OBJS= ./obj/main.o  ./obj/test.o

여기서 VPATH의 역할은 소스 파일들의 위치를 Make에 알려주어 %.c 에 패스를 적어주지
않아도 Make 가 VPATH에 정의된 경로에서 소스를 찾아 준다. 참고로 VPATH에 src 경로를 여러개 적어 주는게 가능하다.

'OldStory > WORKS' 카테고리의 다른 글

Task List  (0) 2010.07.21
ATMEL USB 예제 소스  (0) 2010.07.08
VPATH  (0) 2010.07.06
section  (0) 2010.07.02
어셈블러 확장자  (0) 2010.07.01
main함수 없이 프로그램 짜기  (0) 2010.06.30
by Alnilam 2010.07.06 19:11
| 1 2 3 4 |

티스토리 툴바