[완료] Makefile을 이용할때, 수정된 파일만 컴파일되게 하는 방법
글쓴이: klara / 작성시간: 월, 2010/05/10 - 5:08오전
Makefile을 이용하여 프로그램을 컴파일 할려고 합니다.
간단하게 다음과 같은 Makefile 파일을 작성하였습니다.
.SUFFIXES = .cpp .o CXX = g++ OBJS_DIR = objects SRCS = $(wildcard *.cpp) OBJS = $(patsubst %.cpp, %.o, $(SRCS)) TARGET = polariton all: dirs $(TARGET) dirs: install -d $(OBJS_DIR) $(TARGET): $(OBJS) $(CXX) -o $@ $(patsubst %, ./$(OBJS_DIR)/%, $(OBJS)) %.o : %.cpp $(CXX) -I. -c -o ./$(OBJS_DIR)/$@ $< clean: rm -f $(patsubst %, ./$(OBJS_DIR)/%, $(OBJS)) $(TARGET)
그런데, make 할때마다 모든 파일을 컴파일합니다.
Makefile은 자동으로 관리해주는 걸로 알고 있었는데, 아무것도 안건드리고 make하고 바로 make 해도 다시 컴파일 하고 있더군요.
지금은 간단한 main.cpp 파일 하나뿐이지만, 파일이 많아지면 시간이 오래 걸릴듯합니다.
자동으로 관리하게 하기위해선 특별한 Makefile을 작성해야 하나요...?
Forums:
저같은경우는
고수님... 앞에서 요량을 ㅋ
기억이 가물가물....
집에서 이 책에 비슷한 내용을 본 기억이 가물가물 하네요..
http://www.yes24.com/24/goods/2817871?scode=032&srank=8
시간 되시면 찾아 보세요..
컴파일 결과
컴파일 결과 오브젝트 파일을 ./$(OBJS_DIR)/ 디렉토리로 넣어주는데, make가 그에 대한 파일을 찾지 못해서 생기는 문제같네요.
오브젝트 파일을 현재 디렉토리에 생성하거나 $(OBJS)와 %.o: %.cpp 에도 디렉토리 이름을 같이 추가해보시기 바랍니다.
Hyun님이 말씀하신데로...
에 보시면, prerequisite ($(OBJS))를 찾을 수 없으니, 항상 command 를 실행하게 되는 것입니다. 근데, command에 보면, object 파일들을 전부 $(OBJS) 에 저장하는 것이 아니라, 다시 $(OBJS_DIR)/에 저장하고 있기때문에 항상 make를 호출 할때 마다 다시 컴파일 하게 되는 것입니다.
답변 달아주신 분들
답변 달아주신 분들 모두 감사합니다.
말씀하신대로 의존성에 OBJS_DIR이 포함되어있지 않아서 그랬던거 같습니다.
OBJS = $(patsubst %.cpp, ./$(OBJS_DIR)/%.o, $(SRCS))
로 고치니 매번 재컴파일 하는 문제가 해결되었습니다.
댓글 달기