==== Sectormania mit CMake unter Windows ==== === Übersicht über Libraries und Umgebungsvariablen === c:\Daten\Projekte Sectormania (Rev. 92) bin media source SectormaniaInst c:\Libraries BoostSrc (1.39) = %BOOST_HOME%, %BOOST_ROOT% boost doc libs more ... Etl (-> EtlSrc) = %ETL_HOME% include lib EtlSrc (Rev. 50/57 + kl. Änderungen + CMake-Scripte von Ogre) bin CMake EditableTerrain media sample OgreSdk (-> OgreSrc) = %OGRE_HOME% bin debug = in %PATH% .. include lib media .. OgreSrc (Rev. 8600 + Dep. 20080203) = %OGRE_SRC% CMake Components Dependencies Docs .. PhysFs (-> PhysFsSrc) = %PhysFS_HOME% bin include lib PhysFsSrc (2.0.0) archivers bin extras lzma .. PocoSrc (1.3.5) = %POCO_HOME% bin build contrib CppUnit .. ProtoBufSrc (2.1.0) = %ProtoBuf_HOME% editors examples gtest java .. Qt (2009.02) = %QTDIR%, in %PATH% .moc bin = in %PATH% demos doc .. === Projektdateien mit CMake erzeugen === Erster CMake-Durchlauf: CMake Error at CMake/Utils/FindPkgMacros.cmake:101 (message): Required library CEGUI not found! Install the library (including dev packages) and try again. If the library is already installed, set the missing variables manually in cmake. Call Stack (most recent call first): CMake/Packages/FindCEGUI.cmake:42 (findpkg_finish) CMakeLists.txt:18 (find_package) Die FindCEGUI.cmake durch die Version von Ogre ersetzt. Außerdem manuell eingetragen: | CMAKE_INSTALL_PREFIX | C:/Daten/Projekte/SectormaniaInst | | OGRE_CEGUIRenderer_INCLUDE_DIR | C:\Libraries\OgreSdk\include\OGRE\CEGUIRenderer | | OGRE_CEGUIRenderer_LIBRARY_DBG | C:\Libraries\OgreSdk\lib\debug\CEGUIOgreRenderer_d.lib | | OGRE_CEGUIRenderer_LIBRARY_FWK | NOTFOUND (?) | | OGRE_CEGUIRenderer_LIBRARY_REL | C:\Libraries\OgreSdk\lib\release\CEGUIOgreRenderer.lib | Zweiter Durchlauf: CMake Error at CMake/Utils/FindPkgMacros.cmake:101 (message): Required library OIS not found! Install the library (including dev packages) and try again. If the library is already installed, set the missing variables manually in cmake. Call Stack (most recent call first): CMake/Packages/FindOIS.cmake:41 (findpkg_finish) CMakeLists.txt:19 (find_package) Also die FindOIS.cmake von OgreSrc übernommen. Dritter Durchlauf: CMake Error at CMake/Utils/FindPkgMacros.cmake:101 (message): Required library ProtoBuf not found! Install the library (including dev packages) and try again. If the library is already installed, set the missing variables manually in cmake. Call Stack (most recent call first): CMake/Packages/FindProtoBuf.cmake:32 (findpkg_finish) CMakeLists.txt:21 (find_package) Manuell eingetragen: | PHYSFS_INCLUDE_DIR | C:/Libraries/PhysFs/include | | PHYSFS_LIBRARY | C:/Libraries/PhysFs/lib/physfs.lib | | ProtoBuf_INCLUDE_DIR | C:/Libraries/ProtoBufSrc/src | | ProtoBuf_LIBRARY_DBG | C:/Libraries/ProtoBufSrc/vsprojects/Debug/libprotobuf.lib | | ProtoBuf_LIBRARY_REL | C:/Libraries/ProtoBufSrc/vsprojects/Release/libprotobuf.lib | Danach lief CMake erst einmal durch, die Projektdatei wurde in C:\Daten\Projekte\Sectormania\bin erzeugt. === Kompilieren in Visual-Studio === == SharedLib == 1>..\..\source\shared_lib\src\Localisation.cpp(4) : fatal error C1083: Cannot open include file: 'Poco/DOM/DOMParser.h': No such file or directory 1>..\..\source\shared_lib\src\FileSystem.cpp(6) : fatal error C1083: Cannot open include file: 'physfs.h': No such file or directory (... Durchlauf 2 ...) 1>..\..\source\shared_lib\src\FileSystem.cpp(12) : fatal error C1083: Cannot open include file: 'Poco/Util/PropertyFileConfiguration.h': No such file or directory Zu den include-Pfaden hinzugefügt: (nur C:\Libraries\PocoSrc\Foundation\include war eingetragen, PhysFS fehlte vollständig) * C:\Libraries\PocoSrc\XML\include * C:\Libraries\PocoSrc\Util\include * C:\Libraries\PhysFs\include Damit kompiliert die SharedLib. == TestSharedLib == Kein Problem. == Sectormania == 1>..\..\source\game\src\GUI\Manager.cpp(44) : error C2039: 'Warnings' : is not a member of 'CEGUI' 1>..\..\source\game\src\GUI\Manager.cpp(44) : error C2065: 'Warnings' : undeclared identifier 1>..\..\source\game\src\GUI\Manager.cpp(44) : error C2051: case expression not constant Zeile 44 + 45 auskommentiert, dann ließ sich Sectormania kompilieren. == ObjEditor == 1>c:\daten\projekte\sectormania\source\object_editor\OgreWidget.h(5) : fatal error C1083: Cannot open include file: 'QGLWidget': No such file or directory 1>..\..\source\object_editor\OgreManager.cpp(42) : error C2440: 'initializing' : cannot convert from 'const Ogre::RenderSystemList' to 'Ogre::RenderSystemList *' 1> No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called C:\Libraries\Qt\include\QtOpenGL zu den include-Pfaden hinzugefügt. Zeile 42ff in der OgreManager.cpp geändert: Ogre::RenderSystemList list = mRoot->getAvailableRenderers(); mRoot->setRenderSystem(list[0]); Und es kompiliert. == MapEditor == 1>..\..\source\map_editor\OgreManager.cpp(43) : error C2440: 'initializing' : cannot convert from 'const Ogre::RenderSystemList' to 'Ogre::RenderSystemList *' 1> No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called 1>c:\daten\projekte\sectormania\source\map_editor\Util.h(5) : fatal error C1083: Cannot open include file: 'boost/random/mersenne_twister.hpp': No such file or directory Der erste Fehler, wie schon beim Objekt-Editor gefixt. C:\Libraries\BoostSrc zu den include-Pfaden hinzugefügt. Danach jede Menge Linker-Fehler. Nach dem Hinzufügen von C:\Libraries\Etl\lib\EditableTerrain_d.lib zu den Linker-Input-Files blieb übrig: 1>TerrainManager.obj : error LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __thiscall TerrainManager::metaObject(void)const " (?metaObject@TerrainManager@@UBEPBUQMetaObject@@XZ) 1>TerrainManager.obj : error LNK2001: unresolved external symbol "public: virtual void * __thiscall TerrainManager::qt_metacast(char const *)" (?qt_metacast@TerrainManager@@UAEPAXPBD@Z) 1>TerrainManager.obj : error LNK2001: unresolved external symbol "public: virtual int __thiscall TerrainManager::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@TerrainManager@@UAEHW4Call@QMetaObject@@HPAPAX@Z) 1>BrushControlWidget.obj : error LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __thiscall BrushControlWidget::metaObject(void)const " (?metaObject@BrushControlWidget@@UBEPBUQMetaObject@@XZ) 1>BrushControlWidget.obj : error LNK2001: unresolved external symbol "public: virtual void * __thiscall BrushControlWidget::qt_metacast(char const *)" (?qt_metacast@BrushControlWidget@@UAEPAXPBD@Z) 1>BrushControlWidget.obj : error LNK2001: unresolved external symbol "public: virtual int __thiscall BrushControlWidget::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@BrushControlWidget@@UAEHW4Call@QMetaObject@@HPAPAX@Z) 1>BrushControlWidget.obj : error LNK2019: unresolved external symbol "protected: void __thiscall BrushControlWidget::changedShape(class QString const &)" (?changedShape@BrushControlWidget@@IAEXABVQString@@@Z) referenced in function "public: void __thiscall BrushControlWidget::setShape(class QString const &)" (?setShape@BrushControlWidget@@QAEXABVQString@@@Z) 1>BrushControlWidget.obj : error LNK2019: unresolved external symbol "protected: void __thiscall BrushControlWidget::changedMirrorMode(int)" (?changedMirrorMode@BrushControlWidget@@IAEXH@Z) referenced in function "public: void __thiscall BrushControlWidget::setMirrorModeDisabled(bool)" (?setMirrorModeDisabled@BrushControlWidget@@QAEX_N@Z) 1>BrushControlWidget.obj : error LNK2019: unresolved external symbol "protected: void __thiscall BrushControlWidget::changedSize(int,int,bool,bool)" (?changedSize@BrushControlWidget@@IAEXHH_N0@Z) referenced in function "public: void __thiscall BrushControlWidget::setSize(int)" (?setSize@BrushControlWidget@@QAEXH@Z) 1>BrushControlWidget.obj : error LNK2019: unresolved external symbol "protected: void __thiscall BrushControlWidget::changedStrength(int,int,bool,bool)" (?changedStrength@BrushControlWidget@@IAEXHH_N0@Z) referenced in function "public: void __thiscall BrushControlWidget::setStrength(int)" (?setStrength@BrushControlWidget@@QAEXH@Z) 1>BrushControlWidget.obj : error LNK2019: unresolved external symbol "protected: void __thiscall BrushControlWidget::changedRotation(int,int,bool,bool)" (?changedRotation@BrushControlWidget@@IAEXHH_N0@Z) referenced in function "public: void __thiscall BrushControlWidget::setRotation(int)" (?setRotation@BrushControlWidget@@QAEXH@Z) 1>BrushControlWidget.obj : error LNK2019: unresolved external symbol "protected: void __thiscall BrushControlWidget::changedFade(int,int,bool,bool)" (?changedFade@BrushControlWidget@@IAEXHH_N0@Z) referenced in function "public: void __thiscall BrushControlWidget::setFade(int)" (?setFade@BrushControlWidget@@QAEXH@Z) Dies ließ sich beheben, indem man TerrainManager.h und BrushControlWidget.h in der CMakeLists.txt zu OBJEDIT_MOC_FILES hinzugefügt und die Projektdatei mit CMake neu erstellt (habe die Änderung jetzt in Rev. 93 eingecheckt). Danach wieder jede Menge Linker-Probleme, die sich durch Hinzufügen von C:\Libraries\Etl\lib\EditableTerrain_d.lib zum Linker beheben ließen. == ALL_BUILD == Damit lief ALL_BUILD auch ohne Probleme durch. == INSTALL == Kopiert im Moment nur die SectorMania.exe nach C:\Daten\Projekte\SectormaniaInst\bin. Ist damit natürlich nicht ausführbar. === Ausführen der Programme === Die Binaries sind alle in C:\Daten\Projekte\Sectormania\bin\bin\Debug gelandet, anstatt der dafür im Repository vorgesehenen Verzeichnisse C:\Daten\Projekte\Sectormania\bin\map_editor\debug etc. Damit fehlen resources.cfg, plugins.cfg etc. Kopiert man diese zurück (und entfernt die QT-DLLs, die nicht zu meiner Version von QT passen ;)), dann laufen die Editoren. Die Sectormania.exe beschwert sich noch über ein paar DLLs (PocoFoundationd.dll, PocoXMLd.dll, PocoUtild.dll, physfs.dll), die man entweder in %PATH% packen muss, oder ins Binary-Verzeichnis kopieren muss. Wenn man dann noch die plugins.cfg von einem der Editoren klaut, läuft es.