2016-12-08 4 views
0

컴파일러의 객체 파일을 소스 파일과 다른 폴더에 배치하고 싶습니다. 내 소스 코드가 빌드되는 방식과 동일한 폴더 구조를 사용할 때 작동하게 만들었지 만,이 방법은 내가 찾고있는 해결책이 아닙니다.별도의 폴더에 객체 및 종속 파일을 자동으로 배치하기위한 Makefile

출처 :

내가 선호하는 것은 다음과 같다

src/main.cpp 
src/myClass/myClass.cpp 

대상 :

obj/main.o 
obj/myClass.o 

종속성

dep/main.d 
dep/main.d 

내가 지금까지 가지고하면 다음이다,

VARIABLES 여기

$(OBJLIST)=obj/main.o obj/myClass.o 
$(SRCDIR)=src 
$(OBJDIR)=obj 

LINKER

$(PROJECT): $(OBJLIST) 
    $(CXX) $(OBJLIST) $(LIBS) -o [email protected] 

컴파일러 및

이 작동하고 무엇을 내 문제

$(OBJDIR)/%.o: $(SRCDIR)/%.cpp 
    @mkdir -p $(DEPDIR) $(OBJDIR) 
    $(CXX) $(CPPFLAGS) -c $< -o [email protected] 
    $(CXX) $(CPPFLAGS) -MM -MT 1_obj/main.o 0_src/main.cpp -o 2_dep/main.dep 
$(OBJDIR)/%.o: $(SRCDIR)/myClass/%.cpp 
    @mkdir -p $(DEPDIR) $(OBJDIR) 
    $(CXX) $(CPPFLAGS) -c $< -o [email protected] 
    $(CXX) $(CPPFLAGS) -MM -MT 1_obj/myClass.o 0_src/myClass/myClass.cpp -o 2_dep/myClass.dep 
그것은 어떻게 든
SRCDIRS 
    ./ 
    ./myClass 

그래서 나는이 두 가능성을 일반화를 희망 나는

$(OBJDIR)/%.o: $(SRCDIR)/$(SRCDIRS)/%.cpp 
    @mkdir -p $(DEPDIR) $(OBJDIR) 
    $(CXX) $(CPPFLAGS) -c $< -o [email protected] 
    $(CXX) $(CPPFLAGS) -MM -MT [email protected] @< -o $(DEPDIR)/$(notdir $(basename $<).dep) 

처럼 뭔가 컴파일 정의를 병합 할 수있는 희망하지만 : 14,또한 포함라는 SRCDIRS 객체가 솔기 SRCDIRS를 통해 반복하지 않으며 일치하는 항목이 없는지 확인합니다.

+0

일반적인 방법은'.d' 파일을 makefile에 포함시키는 것입니다. –

+0

이것은 실제로 내 문제는 아니지만, 나는 자동으로 o- 파일을 다른 폴더에 넣을 수있는 방법을 알고 싶습니다. 그러나 .cpp 파일의 전체 폴더 구조를 다시 작성하지 않아도됩니다. 따라서 모든 폴더와 하위 폴더에서 모든 소스 파일을 가져 와서 컴파일하는 동안 o- 파일을 단일 폴더에 저장하십시오. – Lucian

답변

0

vpath으로 할 수 있습니다. VPATH는 만 소스 파일을 찾을 수 있습니다.

그래서,이 같은 :

VPATH = $(SRCDIRS) 

$(OBJDIR)/%.o : %.c 
     ... 

당신이 필요합니다.

+0

고맙습니다. 이것은 완전히 문제를 해결했습니다. – Lucian