[cmake] CMakeLists.txt dla gry w SDLu

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
Awatar użytkownika
doles2
Sędziwy Jeż
Sędziwy Jeż
Posty: 46
Rejestracja: 24 lip 2006, 19:58
Płeć: Mężczyzna
Wersja Ubuntu: 11.10
Środowisko graficzne: KDE Plasma
Architektura: x86_64

[cmake] CMakeLists.txt dla gry w SDLu

Post autor: doles2 »

Witam,
piszę jakiś dłuższy czas temu rozpocząłem moją przygodę z programowaniem gier. Pomęczyłem się, pomyślałem i napisałem na początek klona klasycznego Ponga. Niedawno zachciało mi dodać jakieś GUI - wybór padł na Guichana. Pomajstrowałem i teraz chciałbym jakoś wygodnie sprawdzić jak to wszystko chodzi. Do tej pory miałem napisany plik Makefile i on odwalał całą robotę. Teraz jednak projekt nieco się rozrósł i przydałby bardziej zaawansowany sposób na budowanie gry. Myślałem o CMake, jednak nie wiem jak się zabrać do napisania CMakeLists.txt. Tak wygląda struktura mojej gry:

Kod: Zaznacz cały

gnopya
|->bin
|->fonts
|->icon
|->textures
|->include
       |->core
       |->gui
|->src
   |->core
   |->gui

Przy pomocy tej strony (http://gpwiki.org/index.php/C:How_to_se ... nvironment) chciałem napisać coś na wzór:

Kod: Zaznacz cały

Project ( Gnopya )

set (
   SRCS_CORE
   src/core/Ball.cpp
   src/core/Paddle.cpp
   src/core/PaddleLeft.cpp
   src/core/PaddleRight.cpp
   src/core/Sounder.cpp
   src/core/Engine.cpp  
)

set ( SRCS_GUI
       src/gui/GameButton.cpp
       src/gui/GameCheckBox.cpp
       src/gui/Gnopya.cpp
       src/gui/main.cpp
)


Find_Package ( SDL REQUIRED )
Find_Package ( SDL_image REQUIRED )
Find_Package( SDL_mixer REQUIRED )
Find_Package( SDL_ttf    REQUIRED )


# Workaround for the non-working REQUIRED flag
if ( NOT SDL_FOUND )
   message ( FATAL_ERROR "SDL not found!" )
endif ( NOT SDL_FOUND )

link_libraries (
   ${SDL_LIBRARY}
   ${SDLIMAGE_LIBRARY}
   ${SDLMIXER_LIBRARY}
   ${SDLTTF_LIBRARY}
   SDLmain
)

add_executable (
   bin/Gnopya
   ${SRCS_CORE} ${SRCS_GUI}
)
Tylko że oczywiście takie rozwiązanie jest z góry skazane na klęskę, bo nie tylko nie działa to co już jest (nie tworzy mi nic w bin/Gnopya) co więcej nie linkuje z Guichan. Ta biblioteka nie posiada swojej paczki dla CMake (jeszcze nie, przynajmniej) i nie wiem jak to połączyć z Cmake. W moim normalnym Makefile miałem takie flagi dla linkera:

Kod: Zaznacz cały

-lguichan_sdl -lguichan
Generalnie to chcę zrobić tak: wszystkie pliki źródłowe z src/core/ oraz src/gui po prostu skompilować (g++ -c) i zostawić utworzone *.o albo w tych samych katalogach albo w bin - to w sumie bez różnicy. na sam koniec oczywiście zlinkować wszystko i zachować plik wykonywalny gry w bin.
Czy mógłby mi ktoś podpowiedzieć jak napisać działający CMakeLists.txt zgodnie z moimi zamiarami ?

PS: Aha, póki pamiętam. Czy da się jakoś ominąć "brzydkie" #include w plikach *.cpp ? Na dzień dzisiejszy mam po prostu konstrukcje typu:

Kod: Zaznacz cały

#include "../../include/core/Engine.h"
taka składnia w kodzie jest równie głupia co siłowa. Czy są jakieś flagi od kompilatora aby podać mu ścieżki do mojego include/core albo include/bin ? Tak abym w pliku pisał tylko:

Kod: Zaznacz cały

#include "costam.h" // albo z <>, nie wiem
i podawał kompilatorowi tylko ścieżkę do katalogu z costam.h
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 3 gości