2014-09-14 3 views
0

Я должен написать Makefile, который «делает все» для выполнения как testimage, так и testcene. Но также, если бы я хотел, я мог бы сделать, сделать testcene или сделать testimage для компиляции только testimage. Но почему я получаю ошибки, ниже, я был вокруг make-файлов, и это может означать, что он не работает.Почему мой Makefile дает мне проблемы?

EXENAME = testscene 
OBJS = testscene.o scene.o image.o png.o rgbapixel.o 

EXENAME = testimage 
OBJS = testimage.o scene.o image.o png.o rgbapixel.o 

CXX = clang++ 
CXXFLAGS = -std=c++1y -stdlib=libc++ -c -g -O0 -Wall -Wextra -pedantic 
LD = clang++ 
LDFLAGS = -std=c++1y -stdlib=libc++ -lpng -lc++abi 

all : testimage testscene 

$(EXENAME) : $(OBJS) 
    $(LD) $(OBJS) $(LDFLAGS) -o $(EXENAME) 

testscene: testscene.o scene.o image.o png.o rgbapixel.o 
    $(LD) testscene.o scene.o image.o png.o rgbapixel.o $(LDFLAGS) -o testscene 

testimage: testimage.o scene.o image.o png.o rgbapixel.o 
    $(LD) testimage.o scene.o image.o png.o rgbapixel.o $(LDFLAGS) -o testimage 

testscene.o : testscene.cpp scene.h image.h png.h rgbapixel.h 
    $(CXX) $(CXXFLAGS) testscene.cpp 

scene.o: scene.h image.h png.h rgbapixel.h 
    $(CXX) $(CXXFLAGS) scene.cpp 

testimage.o : testimage.cpp image.h png.h rgbapixel.h 
    $(CXX) $(CXXFLAGS) testimage.cpp 

image.o : image.cpp image.h png.h rgbapixel.h 
    $(CXX) $(CXXFLAGS) image.cpp 

png.o : png.cpp png.h rgbapixel.h 
    $(CXX) $(CXXFLAGS) png.cpp 

rgbapixel.o : rgbapixel.cpp rgbapixel.h 
    $(CXX) $(CXXFLAGS) rgbapixel.cpp 
clean : 
    -rm -f *.o $(EXENAME) 
[email protected] mp2]$ vi Makefile 
[email protected] mp2]$ make 
Makefile:21: warning: overriding commands for target `testimage' 
Makefile:15: warning: ignoring old commands for target `testimage' 
make: Nothing to be done for `all'. 
[email protected] mp2]$ 

благодаря

ответ

3

Действительно? Посмотрели ли вы на две строки, которые содержат сообщения об ошибках?

В строке 15 необходимо правило для $(EXENAME) : $(OBJS) где переменной EXENAME устанавливаются в testimage (переопределение и делает бесполезным предыдущую установку EXENAME в первой строке).

Затем в строке 21 у вас есть другое правило для testimage: testimage.o scene.o image.o png.o rgbapixel.o.

Отсюда ошибка.

+0

Я бы поднял верх, если вы удалите «Правда?» поскольку это определенно встречается как снисходительный. –

+1

+1, и я думаю, что «правда?» является подходящим - вопрос показывает очень мало исследований. (Этот make-файл также сильно избыточен, но может ждать еще один день.) – Beta

+0

Я удалил код ниже, исправляет ли он, $ (EXENAME): $ (OBJS) $ (LD) $ (OBJS) $ (LDFLAGS) -o $ (EXENAME) – user124627

Смежные вопросы