Из содержимого файла Makefile я прочитал, что двоичный файл cup
создается только из main.o
и не связывает window.o
или rect.o
, где, вероятно, и определяются эти пропущенные ссылки. По крайней мере, я бы обновил основное правило так:
cup: main.o window.o rect.o
g++ $(LXXFLAGS) -o cup $^
Таким образом, вы могли бы еще больше использовать неявные правила, встроенные в make
, и, если следовать стандартному именованию для флаги связывания, Makefile
может быть еще более уменьшен до простой линии связывания (поскольку правила компиляции неявны), например:
$ cat Makefile
CXXFLAGS = -Ideps/include -std=c++0x
LDFLAGS = -Ldeps/lib
LDLIBS = -lmingw32 -lSDL2main -lSDL2
cup: main.o window.o rect.o
$(LINK.cc) $^ $(LDLIBS) -o $@
Вывод:
$ make
g++ -Ideps/include -std=c++0x -c -o main.o main.cpp
g++ -Ideps/include -std=c++0x -c -o window.o window.cpp
g++ -Ideps/include -std=c++0x -c -o rect.o rect.cpp
g++ -Ideps/include -std=c++0x -Ldeps/lib main.o window.o rect.o -lmingw32 -lSDL2main -lSDL2 -o cup