Jestem uczącym się programistą C++ piszącym grę początkowo na platformie Mac przy użyciu XCode, ale teraz przechodzę na platformę poprzez wykorzystanie CMake. Do tej pory mogę go skompilować na moim netbookie ickle linux i tworzę środowisko dev na tej maszynie do kodowania go-go. Jednak stwierdzam, że gcc rekompiluje każdy plik za każdym razem, gdy dokonuję zmiany. Najwyraźniej potrzebuję dodatkowej konfiguracji do CMakeLists.txt. Mój obecny jest bardzo prosty. Tak jak to;cmake & gcc kompiluje każdy plik za każdym razem
cmake_minimum_required (VERSION 2.8)
set (source
Creature.cpp
DisplayManager.cpp
Engine.cpp
EngineState.cpp
Entity.cpp
GameWorld.cpp
GfxSFML.cpp
Item.cpp
Map.cpp
Position.cpp
Projectile.cpp
ScreenTile.cpp
SquadAI.cpp
Terrain.cpp
UIButton.cpp
UICharPanel.cpp
UIView.cpp
Utility.cpp
Weapon.cpp
fov.cpp
main.cpp
)
find_package (OpenAL)
find_package (OpenGL)
find_package (SFML)
set(CMAKE_CXX_FLAGS "-g -Wall -pg")
add_executable (tractionedge ${source})
target_link_libraries(tractionedge ${SFML_LIBRARY} ${OPENGL_LIBRARY} ${OPENAL_LIBRARY})
Skoncentrowałem się na C++ raczej na języku, niż na kompilacji systemów, trzymanie się XCode za wszystko. Moja wiedza na temat Autotools (marka?) I Gcc jest bardzo ograniczona. W jaki sposób GCC rekompiluje tylko zmienione źródło?
Nie powinieneś używać funkcji 'GLOB()', ponieważ jeśli dodasz nowy plik '.cpp', CMake nie będzie o tym wiedział i nie będzie automatycznie ponownie uruchamiany. W takim przypadku będziesz musiał ręcznie uruchomić cmake, zmuszając do kompletnej przebudowy wszystkiego. – Milliams
Nie zgadzam się. Spójrz na duże projekty z mnóstwem plików src (opencv), używają GLOB wszędzie i tak, ponownie uruchamiają cmake po dodaniu nowych plików (ale to jest coś, co i tak musisz zrobić): "cmake" jest mniejszym obciążeniem niż edytuj CMakeLists i ... uruchom cmake, aby zaktualizować pliki makefile !! – gaspard
Milliamy, wszyscy się mylicie, właśnie testowałem "cmake" po kompletnej (i dużej) kompilacji: to nie oznacza, że wszystkie pliki są brudne. – gaspard