Makefile을 사용하여 컴파일시 변경된 파일만 컴파일 하기
안녕하세요. 처음 프로젝트에 Makefile을 사용해본 초짜입니다.
프로그램 개발시 항상 IDE를 사용하다가 이번에 필요가 있어서 Makefile 베이스로 프로젝트를 변경했습니다.
질문1. 컴파일시 변경된 파일만 컴파일을 해야 하는데 항상 빌드 올로 컴파일 됩니다. 이를 해결할 방법이 궁금합니다.
Makefile에 대하여 검색을 해서 공부를 하다보니 '의존성 검사'라는것을 알게 되었습니다.
질문2. winxp환경에서도 '의존성 검사' 툴을 사용할 수 있는지 궁금합니다. 가능하다면 간단한 사용법이라도 부탁드립니다.
프로젝트 구성이 재귀 호출 Makefile로 구성되어 있습니다. 각 디렉토리마다 Makefile이 있으며 아래 컴파일 스크립트로 컴파일을
수행합니다.
질문3. OBJECTS 변수에 들어가는 값들이 디렉토리를 이동하면서 계속 누적시킬수 있는 방법이 궁금합니다.
OBJECTS 값들이 해당 디렉토리에서는 유지가 되는데 디렉토리를 이동하고 다른 Makefile을 수행하면 이전 내용을 잃어버립니다.
export 키워드를 사용해서 하면 될것 같기도 해서 이것저것 해봤는데 성공하지 못했습니다.
저의 환경에 대하여 설명드리겠습니다.
개발환경 OS는 winxp이며 GnuWin32 Utility Makefile 3.81을 사용하고 있고 타겟은 ARM입니다.
디렉토리 구성은 아래와 같습니다.
ROOT = $(shell cd)
SRC_DIR = $(ROOT)\source
OBJ_DIR = $(ROOT)\object
OUT_DIR = $(ROOT)\output
export ROOT SRC_DIR OBJ_DIR OUT_DIR
ROOT : 최상위 디렉토리
source : 소스코드들이 있는 디렉토리이며 컴파일시 생성된 오브젝트 파일은 아래 object디렉토리로 바로 이동
object : 오브젝트 코드들이 있는 디렉토리
output : 최종 이미지가 위치할 디렉토리
컴파일을 시작하기 전에 해당 디렉토리 존재여부를 검사하여 있으면 지나가고 없으면 생성시킵니다.
컴파일은 아래와 같이 내부 확장자 규칙을 사용하여 컴파일합니다.
.SUFFIXES : .o .s
%.o : %.s
$(AS) $(ASFLAGS) $< -o $(OBJ_DIR)\$@
.SUFFIXES : .o .c
%.o : %.c
$(CC) $(CFLAGS) -c $< -o $(OBJ_DIR)\$@
하위 디렉토리 별로 있는 Makefile 내용입니다.
OBJECTS += $(patsubst %.s, %.o, $(wildcard *.s))
OBJECTS += $(patsubst %.c, %.o, $(wildcard *.c))
all: $(OBJECTS)
링크는 아래 스크립트로 수행합니다.
$(LD) $(LFLAGS) -o$(OUT_DIR)\$(join $(TARGET),.axf) $(wildcard $(OBJ_DIR)/*.o)


댓글 달기