2011-07-05 4 views
0

Makefile을 배우려고합니다. 나는 일하는 작은 프로젝트를 해왔지만 지금은 연장했지만 운이 없다. 여기에 질문이 있습니다. 내가 subdirs에서 모든 파일을 컴파일하고 빌드/개체 디렉토리 (내가 일할 수없는)에 저장하고 빌드/개체 디렉토리에있는 파일에 바이너리를 연결하려고합니다. 여기에 내가 지금까지 얻었을 것입니다 :Makefile beginner help

#compiler vars 
CC=g++ 
CFLAGS=-c -Wall 
LDFLAGS= 


#build vars 
INCLUDE=-I. -IFramework/ -IGame/ 
SOURCES=test.cpp 

include Modules.mk 
ifeq ($(mod3D), true) 
SOURCES += $(mod3D_src) 
INCLUDE += $(mod3D_include) 
endif 

ifeq ($(mod2D), true) 
SOURCES += $(mod2D_src) 
INCLUDE += $(mod2D_include) 
endif 

ifeq ($(modInput), true) 
SOURCES += $(modInput_src) 
INCLUDE += $(modInput_include) 
endif 

OBJECTS=$(SOURCES:.cpp=.o) 
OUTPUT=game.bin 

all: $(SOURCES) $(OUTPUT) 

$(OUTPUT): $(OBJECTS) 
    $(CC) $(LDFLAGS) $(OBJECTS) -o [email protected] 

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

.PHONY: clean 

clean: 
    -rm $(OUTPUT) $(OBJECTS) 

Modules.mk

#Modules 
mod3D=true 
mod2D=true 
modInput=true 

mod3D_include=-IGraphics3D 
mod2D_include=-IGraphics2D 
modInput_include=-IInput 

mod3D_src=Graphics3D/*.cpp 
mod2D_src=#Graphics2D/*.cpp 
modInput_src=Input/*.cpp 

그것은 나에게 오류 제공합니다

make: *** No rule to make target `Graphics3D/*.o', needed by `game.bin'. Stop. 

내가 잘못 뭐하는 거지 모르겠어요. 미리 감사드립니다. Gasim

답변

0

이 수정은 매우 간단하다 :

mod3D_src = $(wildcard Graphics3D/*.cpp) 
# and likewise: 
mod2D_src = # $(wildcard Graphics2D/*.cpp) 
modInput_src = $(wildcard Input/*.cpp) 

은 GNU 수 있도록 매뉴얼의이 섹션에서보세요