==== 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.