LINUX.ORG.RU

немогу понять как исправить Makefile


0

1

у меня есть Makefile такого содержания:

LIBS = -L/usr/lib -lSDL
ADDLIBS = -lSDL_image -lSDL_ttf  -lSDL_mixer
IDIR = -I. -I./src/
CC = g++ -g
NAME = Game
SHELL = /bin/sh

#vpath %.o obj
#VPATH = obj

all: main.o ceventmanager.o cgui.o edit.o label.o button.o animation.o sound.o font.o map.o player.o image.o mysdl.o
	$(CC) -o Game $^ $(IDIR) $(LIBS) $(ADDLIBS)

main.o: src/main.cpp
	$(CC) -c src/main.cpp -o obj/main.o $(IDIR) $(LIBS) $(ADDLIBS)

ceventmanager.o: src/cEventManager.cpp src/cEventManager.h
	$(CC) -c src/cEventManager.cpp -o obj/ceventmanager.o $(IDIR) $(LIBS)
	
cgui.o: label.o button.o edit.o src/gui/cGui.cpp src/gui/cGui.h
	$(CC) -c src/gui/cGui.cpp -o obj/cgui.o $(IDIR) $(LIBS)
	
label.o: image.o src/gui/cLabel.cpp src/gui/cLabel.h
	$(CC) -c src/gui/cLabel.cpp -o obj/label.o $(IDIR) $(LIBS)
	
image.o: src/image.cpp src/image.h
	$(CC) -c src/image.cpp -o obj/image.o $(IDIR) $(LIBS)
	
button.o: label.o src/gui/cButton.cpp src/gui/cButton.h
	$(CC) -c src/gui/cButton.cpp -o obj/button.o $(IDIR) $(LIBS)
	
edit.o: label.o src/gui/cEdit.cpp src/gui/cEdit.h
	$(CC) -c src/gui/cEdit.cpp -o obj/edit.o $(IDIR) $(LIBS)
	
mysdl.o: src/mysdl.cpp src/mysdl.h
	$(CC) -c src/mysdl.cpp -o obj/mysdl.o $(IDIR) $(LIBS)
	
font.o: src/font.cpp src/font.h
	$(CC) -c src/font.cpp -o obj/font.o $(IDIR) $(LIBS)
	
sound.o: src/sound.cpp src/sound.h
	$(CC) -c src/sound.cpp -o obj/sound.o $(IDIR) $(LIBS)
	
animation.o: src/animation.cpp src/animation.h
	$(CC) -c src/animation.cpp -o obj/animation.o $(IDIR) $(LIBS)

map.o: src/map.cpp src/map.h
	$(CC) -c src/map.cpp -o obj/map.o $(IDIR) $(LIBS)

player.o: src/player.cpp src/player.h
	$(CC) -c src/player.cpp -o obj/player.o $(IDIR) $(LIBS)

clean:
	rm -rf obj/*.o src/*~ *~ Game 
проблема с перменной а также директивой vpath По ману она должна давать make знать где искать файлы которых она не может наити в корне, но если я запускаю данный фиал то все компилиться кроме главной цели, а главная цель компилиться только когда я второй раз набираю команду make, то есть при первой компиляции когда make возвращаеться к главной цели он не ищет не в переменной VPATH ни в директиве vpath а сразу говорит что объектных фаилов нет, хотя как вы наверно уже догадались это не так.

Ответ на: комментарий от anonymous

Находил бы таких как ты и ломал ноги! Какова хрена(ой извините, извините) ты мне книжку тыкаешь еще и за деньги + еще и на английском? В рунете куча информации если нечем помочь лучше помоему промолчать. пруф на ман http://www.opennet.ru/docs/RUS/make_compile/

greshink
() автор топика
OBJS = main.o ceventmanager.o cgui.o edit.o label.o button.o animation.o sound.o font.o map.o player.o image.o mysdl.o

all: $(OBJS:%=obj/%)
	...

зы: мейкфайл фейспалмный...

arsi ★★★★★
()
Ответ на: комментарий от arsi

тогда получаеться цели должны называться obj/cgui.o obj/edit.o???

Reset, без паники изучение autoconf идет полным ходом это временные меры а чем выгоднее cmake?

greshink
() автор топика
Ответ на: комментарий от greshink

Хотя бы тем что отрабатывает быстрее автохелла.

fat_angel ★★★★★
()
Ответ на: комментарий от greshink

Книжка бесплатная. Результат копания в куче рунетовской информации ты нам уже показал.

anonymous
()
Ответ на: комментарий от greshink

> тогда получаеться цели должны называться obj/cgui.o obj/edit.o???

кстати да.

да и вообще...

SRCDIR = src
OBJDIR = obj

LIBS = -L/usr/lib -lSDL
ADDLIBS = -lSDL_image -lSDL_ttf  -lSDL_mixer
IDIR = -I. -I./$(SRCDIR)
CC = g++ -g
TARGET = Game
SHELL = /bin/sh

OBJS_BASE = main.o cEventManager.o image.o mysql.o font.o sound.o animation.o map.o player.o
OBJS_GUI = cGui.o cLabel.o cButton.o cEdit.o

OBJS_BASE := $(OBJS_BASE:%=$(OBJDIR)/%)
OBJS_GUI  := $(OBJS_GUI:%=$(OBJDIR)/gui_%)
OBJS_ALL  := $(OBJS_BASE) $(OBJS_GUI)


all: $(TARGET)

$(TARGET): $(OBJS_ALL)
        $(CC) -o $@ $^ $(LIBS) $(ADDLIBS)

dep_files := $(wildcard $(OBJDIR)/*.o.d)
ifneq ($(dep_files),)
  $(dep_files): ;
  include $(dep_files)
endif

$(OBJS_BASE): $(OBJDIR)/%.o: $(SRCDIR)/%.cpp
        $(CC) -c -o $@ $(IDIR)  -MD -MT '$@' -MF '$@.d' $<

$(OBJS_GUI): $(OBJDIR)/gui_%.o: $(SRCDIR)/gui/%.cpp
        $(CC) -c -o $@ $(IDIR)  -MD -MT '$@' -MF '$@.d' $<

clean:
        rm -f $(OBJDIR)/*.o $(OBJDIR)/*.o.d $(SRCDIR)/*~ $(SRCDIR)/gui/*~ *~

distclean: clean
        rm -f $(TARGET)
остальное сам подправишь…

arsi ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.