Le Manuel de Programmation de KDevelop: Le Manuel de l'Utilisateur pour la Conception d'Applications C++ pour l'Environnement de Bureau KDE avec l'EDI KDevelop, Version 1.2 | ||
---|---|---|
Précédent | Chapitre 3. Créer une nouvelle Application | Suivant |
Après la génération du projet, nous allons d'abord faire un petit tour dans le code source pour avoir une vision globale de la façon dont fonctionne l'architecture de l'application. Cela ne nous fera pas vraiment avancer mais il peut être utile de savoir où effectuer les modifications dans les prochaines étapes. Lorsque vous ouvrez la page LFV (Logical File Viewer) de la vue arborescente, vous voyez des dossiers qui contiennent déjà des fichiers du projet utiles au développeur. Les deux premiers dossiers sont "En-têtes" et "Sources". Évidemment, le dossier En-têtes contient tous les fichiers d'en-tête et le dossier Sources tous les codes sources. Les autres dossiers ne nous intéressent pas pour l'instant, nous y reviendrons plus tard pour voir ce qu'ils contiennent. Les deux dossiers contiennent donc les fichiers suivants :
En-têtes :
kscribble.h : contient la déclaration de la classe KScribbleApp
kscribbledoc.h : contient la déclaration de la classe KScribbleDoc
kscribbleview.h : contient la déclaration de la classe KScribbleView
resource.h : contient un ensemble de macros pour les identificateurs de menus
kscribble.cpp : contient l'implantation de la classe KScribbleApp
kscribbledoc.cpp : contient l'implantation de la classe KScribbleDoc
kscribbleview.cpp : contient l'implantation de la classe KScribbleView
main.cpp : contient l'implantation de la fonction main().
1 Making all in docs 2 make[1]: Entering directory `/home/rnolden/Tutorial/kscribble1/kscribble/docs' 3 Making all in en 4 make[2]: Entering directory `/home/rnolden/Tutorial/kscribble1/kscribble/docs/en' 5 make[2]: Nothing to be done for `all'. 6 make[2]: Leaving directory `/home/rnolden/Tutorial/kscribble1/kscribble/docs/en' 7 make[2]: Entering directory `/home/rnolden/Tutorial/kscribble1/kscribble/docs' 8 make[2]: Nothing to be done for `all-am'. 9 make[2]: Leaving directory `/home/rnolden/Tutorial/kscribble1/kscribble/docs' 10 make[1]: Leaving directory `/home/rnolden/Tutorial/kscribble1/kscribble/docs' 11 make[1]: Entering directory `/home/rnolden/Tutorial/kscribble1/kscribble' 12 g++ -DHAVE_CONFIG_H -I. -I. -I.. -I/opt/kde/include -I/usr/lib/qt/include -I/usr/X11R6/include -O0 -g -Wall -c kscribbleview.cpp 13 g++ -DHAVE_CONFIG_H -I. -I. -I.. -I/opt/kde/include -I/usr/lib/qt/include -I/usr/X11R6/include -O0 -g -Wall -c kscribbledoc.cpp 14 g++ -DHAVE_CONFIG_H -I. -I. -I.. -I/opt/kde/include -I/usr/lib/qt/include -I/usr/X11R6/include -O0 -g -Wall -c kscribble.cpp 15 g++ -DHAVE_CONFIG_H -I. -I. -I.. -I/opt/kde/include -I/usr/lib/qt/include -I/usr/X11R6/include -O0 -g -Wall -c main.cpp 16 /usr/bin/moc ./kscribble.h -o kscribble.moc.cpp 17 g++ -DHAVE_CONFIG_H -I. -I. -I.. -I/opt/kde/include -I/usr/lib/qt/include -I/usr/X11R6/include -O0 -g -Wall -c kscribble.moc.cpp 18 /usr/bin/moc ./kscribbledoc.h -o kscribbledoc.moc.cpp 19 g++ -DHAVE_CONFIG_H -I. -I. -I.. -I/opt/kde/include -I/usr/lib/qt/include -I/usr/X11R6/include -O0 -g -Wall -c kscribbledoc.moc.cpp 20 /usr/bin/moc ./kscribbleview.h -o kscribbleview.moc.cpp 21 g++ -DHAVE_CONFIG_H -I. -I. -I.. -I/opt/kde/include -I/usr/lib/qt/include -I/usr/X11R6/include -O0 -g -Wall -c kscribbleview.moc.cpp 22 /bin/sh ../libtool --silent --mode=link g++ -O0 -g -Wall -o kscribble -L/opt/kde/lib -L/usr/X11R6/lib -rpath /opt/kde/lib -rpath /usr/X11R6/lib kscribbleview.o kscribbledoc.o kscribble.o main.o kscribble.moc.o kscribbledoc.moc.o kscribbleview.moc.o -lkfile -lkfm -lkdeui -lkdecore -lqt -lXext -lX11 23 make[1]: Leaving directory `/home/rnolden/Tutorial/kscribble1/kscribble' |
Comme vous le constatez, nous avons mis des numéros au début de chaque ligne qui n'apparaissent pas dans les messages ; c'est juste pour simplifier la description de ce qui s'est passé pendant la construction. D'abord, make travaille récursivement. Cela signifie qu'il débute dans le dossier où il a été appelé, entre d'abord dans les sous-dossiers, retourne et traite le dossier suivant. À la fin, le dossier où il a été lancé est traité et make termine. C'est pourquoi make est lancé dans le dossier principal du projet qui contient les sources. Aux lignes 1 et 2, vous voyez que le processus make entre dans le dossier docs, puis dans le sous-dossier en. Comme il n'y a rien à faire, il quitte ces dossiers jusqu'à revenir au répertoire source kscribble à la ligne 11. Ensuite, le vrai travail commence : make appele le compilateur, ici g++, pour compiler le fichier source kscribbleview.cpp. La macro -DHAVE&_;CONFIG&_;H indique que le fichier config.h doit être utilisé. Ce fichier, qui contient des macros spécifiques à chaque plate-forme et à l'application, est situé dans le dossier principal du projet. Les commandes -I qui suivent ajoutent un chemin vers des fichiers d'inclusion (NdT : appelés aussi "includes") où g++ pourra trouver les "includes" dont il a besoin. Ces chemins sont le dossier courant, le dossier principal du projet (avec -I..) et le chemin des includes pour les fichiers d'en-tête de KDE, Qt et X11. Les dossiers de ces fichiers d'includes sont déterminés par le script configure et définis dans les Makefiles, c'est pourquoi le compilateur sait où ils sont situés. Enfin, -O0 définit l'optimisation à zéro (aucune optimisation), -g active le déboguage, -Wall définit les avertissements du compilateur à all et -c dit au compilateur de produire un fichier objet intermédiaire, c'est-à-dire seulement compiler le fichier.
Cela est aussi fait pour les autres fichiers sources de notre projet aux lignes 13-15. Évidemment, nos sources sont compilées mais au lieu de lier (NdT : opération réalisée par l'éditeur de liens) les fichiers objets intermédiaires des sources pour en faire un exécutable, nous voyons d'autres commandes. À la ligne 16, vous voyez que le programe "moc" est appelé pour traiter le fichier d'en-tête kscribble.h qui génère le fichier kscribble.moc.cpp. Ensuite, à la ligne 17, le fichier source est aussi compilé. La même chose se passe pour les autres fichiers d'en-tête du projet jusqu'à la ligne 21. En fait, comme la boîte à outils Qt contient le mécanisme signal/slot mais reste une implantation C++, vous utilisez des mots-clés comme les déclarations signals: et slots: dans vos classes qui ne sont pas, à l'origine, dans le langage C++. Cela vous permet de faire facilement communiquer les objets qui héritent de la classe QObject, évitant ainsi l'utilisation des traditionnels pointeurs sur les fonctions de callback. Aussi, l'application nécessite les sources qui implantent cette fonctionnalité et c'est pour cela que moc est appelé. Moc est le Compilateur de Méta Objet (NdT : Moc signifie littéralement Meta Object Compiler) de la boîte à outils Qt et construit l'implantation des mécanismes de signal et de slot en analysant le fichier d'en-tête et en générant un fichier source qui doit être compilé dans le binaire. Comme KDevelop utilise automoc pour déterminer quels fichiers doivent être traités, vous n'avez pas besoin de vous préoccuper des appels à moc et au compilateur C++ pour les fichiers générés par moc. Souvenez-vous seulement des règles qui permettent à une classe d'utiliser le mécanisme de signal et de slot de QObject ou toute classe qui hérite de QObject elle-même, vous devez aussi inclure la macro Q&_;OBJECT (sans point-vigule& ;!) au début de la déclaration de la classe et la déclaration des signaux et des slots.
Enfin, votre binaire est construit par le compilateur. Le binaire généré est appelé kscribble, l'éditeur de liens inclut le chemin vers KDE et vers les bibliothèques de X11 et lie les sources avec les bibliothèques kfile, kfm, kdeui, kdecore, qt, Xext et X11. Ensuite, c'est terminé et make se termine.
Précédent | Sommaire | Suivant |
Créer une nouvelle Application | Niveau supérieur | Le Squelette des Sources |