Помощь начинающему Makefile - PullRequest
0 голосов
/ 05 июля 2011

Я пытаюсь выучить Makefiles.Я сделал небольшой проект, который работает, но сейчас я расширяю его, но мне не повезло.Здесь вопрос.Я пытаюсь скомпилировать все файлы из подкаталогов, а затем сохранить их в каталоге build / objects (что я не могу заставить работать) и связать двоичный файл с файлами в каталоге build / objects.Вот что я получил до сих пор:

#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 $@

.cpp.o: $(SOURCES)
    $(CC) $(CFLAGS) $(INCLUDE) $< -o $@

.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.

Я не знаю, чтоя делаю неправильноЗаранее спасибо, Гасим

Ответы [ 2 ]

0 голосов
/ 05 июля 2011

Исправление довольно простое:

mod3D_src = $(wildcard Graphics3D/*.cpp)
# and likewise:
mod2D_src = # $(wildcard Graphics2D/*.cpp)
modInput_src = $(wildcard Input/*.cpp)
0 голосов
/ 05 июля 2011

Вы неправильно используете подстановочные знаки при формировании предпосылок.

Ознакомьтесь с этим разделом руководства по сборке GNU:
http://www.gnu.org/software/make/manual/make.html#Wildcard-Pitfall

...