2011-09-17 4 views
1

디렉토리 (예 : src)에서 소스 파일을 가져 와서 다른 디렉토리의 오브젝트 파일 (예 : build)로 컴파일하는 메이크 파일을 함께 만들려고합니다. 그런 다음 해당 파일을 가져 와서 기본 디렉토리에서 정적 라이브러리를 만듭니다. 여기 다른 디렉토리에 소스 파일과 오브젝트 파일이있는 자동 makefile

지금까지 내 노력의 :

LIBNAME := test 
LIBNAME := lib$(LIBNAME).a 

CC = g++ 
CFLAGS := -O0 -Wall -g -fPIC 
INCLUDE := include 
SOURCE := src 
BUILD := build 

CPPFILES := $(foreach dir, $(SOURCE)/, $(notdir $(wildcard $(SOURCE)/*.cpp))) 
OBJFILES := $(addprefix $(BUILD)/, $(CPPFILES:.cpp=.o)) 

all: $(LIBNAME) $(OBJFILES) 

$(LIBNAME): $(OBJFILES) 
    ar rcs $(LIBNAME) $(OBJFILES) 

.cpp.o: 
    $(CC) $(CFLAGS) -I$(INCLUDE) -c $< -o [email protected] 

clean: 
    rm -rf $(BUILD) 

저에게이주는 :

make: *** No rule to make target `build/point.o', needed by `libtest.a'. Stop 

답변

3

당신은 너무 오래된 스타일의 접미사 규칙을 다시 작성, GNU 어쨌든 (foreach는 기능) 할 필요되어야 할 것을 .cpp.o에서

$(BUILD)/%.o : $(SOURCE)/%.cpp 

이 트릭을 수행해야합니다. VPATH 변수 또는 vpath 지시문을 사용해보십시오. 자세한 내용은 make 설명서를 참조하십시오.

일반적으로이 문제는 대부분 automake으로 처리 할 수 ​​있습니다.이 문제는 대부분이 작업을 수행합니다.

관련 문제