Partager l'article ! Intégration de Ogre dans QT avec Code::Blocks: Introduction Ce tutoriel a pour but de compiler des programmes intégrant à la fois QT et Ogre ...
Ce tutoriel a pour but de compiler des programmes intégrant à la fois QT et Ogre sous l'environnement de développement Code::Blocks.
Tout d'abord il faut savoir que C::B ne gère pas nativement QT. En effet le principe des signaux/ slots n'est pas propre au C++, et nécessite une compilation particulière faisant intervenir qmake.
La compilation s'effectuera donc manuellement en ligne de commande.
Je commencerais donc par l'utilisation de QT avec Code::Blocks.
Ensuite j'expliquerais comment ajouter les librairies Ogre afin de produire un exécutable se servant des deux librairies. L'exemple de code utilisé et celui fournit et commenté sur le site developpez.com, que vous trouverez ici. Je remercie Denys Bulant pour son tutoriel très complet, les infos sur le sujet étant très rare sur le net.
Nécessaire de survie
Code::Blocks et MinGW
Afin de mener à bien ce tutoriel, il vous faudra bien sur disposer d'une installation de Code::Blocks. Je vous conseille la dernière version en date intégrant MinGW , la 8.02
Il vous faudra également installer les dernières Nightly Builds, que vous trouverez sur le forum de C::B, normalement ici
Des procédures d'installation des Nightly étant disponible partout sur le web, et étant assez aisées, je n'en parlerais pas sur ce tuto.
QT
Vous trouvez la dernière version de QT GPL pour windows ici
Ogre
Il vous faudra le package OGRE 1.6.1 SDK for Code::Blocks + MinGW C++ Toolbox que vous trouverez sur cette page
Code
L'exemple est celui tiré du tutoriel disponible sur developpez.com et écrit par Denis Bulant. La source est disponible en bas de page là
Etape 1 : QT et Code::Blocks
Comme dit plus haut, Code::Blocks et QT ne font pas forcément bon ménage. En effet la compilation d'un projet QT nécessite qmake avant d'appeler un compilateur tel que gcc.
C'est du au principe des slots / signaux qui est propre ici à la librairie QT.
Malgré tout lorsqu'on crée un nouveau projet sous Code::Blocks, on a la possibilité de créer un « QT4 project ». On suit les étapes pour configurer ce projet et on arrive devant un programme minimaliste :
#include <QApplication>
#include <QFont>
#include <QPushButton>
int main(int argc, char* argv[])
{
QApplication app(argc, argv);
QPushButton quit("Quit");
quit.resize(75, 30);
quit.setFont(QFont("Times", 18, QFont::Bold));
QObject::connect(&quit, SIGNAL(clicked()), &app, SLOT(quit()));
quit.show();
return app.exec();
}
On peut ainsi compiler ce projet et tout semble marcher parfaitement... mais il s'agit d'un leurre. En effet ici le projet utilise des slots et signaux qui sont déjà définis dans la librairie QT. Or vous vous rendrez rapidement compte qu'un programmeur utilisant QT en viens tôt ou tard à définir ses propres slots voir même ses propres signaux. A ce moment là, Code::Blocks donnera ses limites. Vous obtiendrez alors une erreur du type « undefined reference to `vtable for ... »
Il existe des plug-ins pour Code::Blocks sensé résoudre ce problème, par exemple QT Workbench. Malheureusement la documentation est inexistante, et je n'ai personnellement jamais réussit à l'utiliser. J'ai donc choisit de compiler mes projets à la main, en attendant de trouver une solution viable.
Afin d'éviter de jongler avec les variables d'environnements, le mieux est d'utiliser le « Qt command prompt » fournit avec le SDK de QT.
Vous le trouverez dans Démarrer => Programmes => Qt SDK by Nokia v2009.01 (open source) => QT command prompt.
Pour compiler un projet réalisé sous C::B, il suffit alors de se rendre dans le répertoire de ce projet, puis d'effectuer la suite de commandes suivantes :
qmake -project
qmake
make
A savoir que « qmake -project » n'est nécessaire qu'a l'ajout d'un nouveau fichier dans le projet.
Également, que make par défaut compile en mode Debug. Pour obtenir un programme release, il suffira de d'utiliser la commande make release .
Etape 2 : QT, Ogre et Code::Blocks
Nous voilà dans le vif du sujet. Pour être sur de ne pas en perdre en route je vais expliquer de A à Z comment compiler un projet ( celui téléchargeable plus haut ) écrit sous C::B.
Tout d'abord, commencer par ouvrir un projet de type Ogre sous Code::Blocks. Supprimer le main ( assurer vous qu'il n'est plus dans le répertoire du projet ). Imaginons que le répertoire contenant le projet soit « C:\projects\QT_Ogre ».
Ogre serrait lui dans C:\OgreSDK.
On commence par ajouter les fichiers main.cpp, ogrewidget.h, ogrewidget.cpp ainsi que le dossier media dans le dossier du projet en cours. On peut alors ouvrir les fichiers sources dans l'éditeur.
Ensuite il faut se rendre dans le repertoire du projet, en l'occurence C:\projects\QT_Ogre
On tape alors « qmake -project » . Un fichier .pro est alors généré. Néanmoins celui ci ne contient pas les liens vers la librairie Ogre. Il faut donc l'éditer.
Le fichier doit ressembler à ça :
######################################################################
# Automatically generated by qmake (2.01a) lun. 30. mars 04:50:27 2009
######################################################################
TEMPLATE = app
TARGET =
DEPENDPATH += .
INCLUDEPATH += .
# Input
HEADERS += ogrewidget.h
SOURCES += main.cpp ogrewidget.cpp
Pour utiliser des librairies externes, on doit ajouter à notre .pro des lignes du style :
INCLUDEPATH += ton/path/vers/include
LIBS += -Lpath/to/lib -lmalib
Dans notre cas, le fichier .pro deviens
######################################################################
# Automatically generated by qmake (2.01a) dim. 29. mars 22:08:54 2009
######################################################################
TEMPLATE = app
TARGET =
DEPENDPATH += .
INCLUDEPATH += E:\OgreSDK\include
INCLUDEPATH += E:\OgreSDK\samples\include
LIBS += -LC:\OgreSDK\lib -LC:\OgreSDK\bin\debug -lOgreMain_d -lOIS_d
# Input
HEADERS += ogrewidget.h
SOURCES += main.cpp ogrewidget.cpp
Dans le cas d'une compilation en mode debug, sinon pour une release ou aura :
######################################################################
# Automatically generated by qmake (2.01a) dim. 29. mars 22:08:54 2009
######################################################################
TEMPLATE = app
TARGET =
DEPENDPATH += .
INCLUDEPATH += E:\OgreSDK\include
INCLUDEPATH += E:\OgreSDK\samples\include
LIBS += -LC:\OgreSDK\lib -LC:\OgreSDK\bin\release -lOgreMain -lOIS
# Input
HEADERS += ogrewidget.h
SOURCES += main.cpp ogrewidget.cpp
On peut alors compiler le projet normalement :
qmake
make
Normalement vous ne devriez avoir aucune erreur de compilation, et obtenir votre exécutable.
Pour qu'il puisse trouver tout les modules nécessaires, il suffit alors de récupérer les dll ainsi que les fichiers de config ( .cfg ) disponible dans C:\OgreSDK\bin\debug ou
C:\OgreSDK\bin\release.
Il vous faudra peut être aussi ajouter les dll propre à QT, en l'occurence Qtcore4.dll et Qtgui4.dll ( QtCore4d.dll et Qtgui4d.dll en debug ).
Vous pouvez alors exécuter votre programme compilé :
