witam, chciałbym prosić o pomoc jak zmodyfikować plik Makefile aby kompilował programy z klasami jeżeli mam je w innym pliku. Jeżeli mam program jedno plikowy kompilacja przez make działa bez problemu. Gdy tworze programy i klasy w osobnych plikach to mam komunikat o błędzie undefined reference to `Window::Window(std::__cxx11::basic_string<char, std::char_traits, std::allocator > const&, int, int)'
Jeżeli kompiluje program bez użycia pliku Makefile to nie ma problemu. Niżej treść pliku Makefile:
CXX = clang++
Kompilowanie programu składającego się z wielu plików źródłowych polega na kompilacji (bez linkowania tzn z parametrm -c) samych plików źródłowych i na końcu na zlinkowaniu ich w gotowy program wynikowy, czyli:
clang++ -c mojplik.cpp
clang++ -c innyplik.cpp
clang++ -o wynikowyprogram mojplik.o innyplik.o
Zauważ że jako zależność dla plików .o dałem wszystkie pliki nagłówkowe. To taki szybki sposób budowania zależności między plikami mający tą negatywną konsekwencje że jak zmodyfikujemy jakikolwiek plik nagłówkowy to przebudowany zostanie cały program. Jako zadanie domowe zostawiam zapoznanie się z narzędziem makedepend które przeskanuje pliki źródłowe i stworzy prawidłową liste zależności.
Masz kilkukrotnie zdefiniowaną funkcję main(). Powyższy Makefile jest przykładem do kompilacji jeśli w jednym katalogu masz jeden program. Jeśli chcesz kompilować kilka programów to albo rozdziel te programy pomiędzy katalogi i do każdego katalogu daj osobny Makefile albo zmodyfikuj powyższy Makefile. Ja nie wiem które pliki u ciebie co oznaczają więc więcej nie pomogę.