Makefile для проекта C ++ SDL - PullRequest
0 голосов
/ 03 марта 2020

Я все еще учусь, как настроить Makefile, и я вроде как здесь потерялся. Я использую windows и в настоящее время пытаюсь запустить мой Makefile для небольшого проекта C ++ SDL.

У меня есть 3. cpp файлов:

main.cpp
window.cpp
rect.cpp

, а также 2 дополнительных заголовочных файла:

Window.h
rect.h

Поэтому возникают проблемы с настройкой всего на Makefile Вот что у меня сейчас есть:

CXXFLAGS = -Ideps/include -std=c++0x
LXXFLAGS = -Ldeps/lib -lmingw32 -lSDL2main -lSDL2

cup: main.o
    g++ main.o -o cup $(LXXFLAGS) 

main.o: main.cpp
    g++ main.cpp -c $(CXXFLAGS) 

window.o: window.cpp 
    g++ window.cpp -c 

rect.o: rect.cpp 
    g++ rect.cpp -c  

Но я получаю кучу неопределенных ссылочные ошибки для моих конструкторов в моей командной строке. Помогите пожалуйста!

1 Ответ

0 голосов
/ 04 марта 2020

Из содержимого файла 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...