Soy un desarrollador de C++ que está aprendiendo a escribir un juego inicialmente en la plataforma Mac usando XCode, pero ahora moviéndome a plataforma cruzada aprovechando CMake. Hasta ahora puedo compilarlo en mi netbook ickle linux y estoy armando un entorno de desarrollo en esta máquina para la codificación en marcha. Sin embargo, estoy descubriendo que gcc recompila cada archivo cada vez que realizo un cambio. Claramente necesito alguna configuración adicional para CMakeLists.txt. Mi actual es muy simple. Al igual que;cmake & gcc compila cada archivo cada vez
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})
Me he concentrado hasta ahora en C++ como un lenguaje en lugar de sistemas de construcción al seguir con XCode para todo. Mi conocimiento de Autotools (¿hacer?) Y Gcc es muy limitado. ¿Cómo hago para que gcc solo recompile la fuente modificada?
No debe usar 'GLOB()' ya que si agrega un nuevo archivo '.cpp', CMake no lo sabrá y no se volverá a ejecutar automáticamente. En este caso, tendría que ejecutar cmake manualmente nuevamente, forzando una reconstrucción completa de todo. – Milliams
No estoy de acuerdo. Mire algunos grandes proyectos con toneladas de archivos src (opencv), usan GLOB en todas partes, y sí, vuelven a ejecutar cmake cuando se agregan nuevos archivos (pero eso es algo que tiene que hacer de todos modos): "cmake" es menos pesado que edite el CMakeLists y ... ¡ejecute cmake para actualizar los makefiles! – gaspard
Milliams, estás equivocado, acabo de probar ejecutar "cmake" después de una compilación completa (y grande): eso no marca todos los archivos como sucios. – gaspard