반응형
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 |
section (0) | 2010.07.02 |
어셈블러 확장자 (0) | 2010.07.01 |
main함수 없이 프로그램 짜기 (0) | 2010.06.30 |