Programmation C++ Utilisation de QtCreator pour la gestion de projet TD 0 B. Raymond and R. Pacanowski September 25, 2014 1 Motivation Ecrire dans un fichier hello_word.cpp, un programme qui affiche «Hello World!»dans la console. Pour ouvrir, une console cherchez l utilitaire nommé "Terminal" ou "Konsole". Pour écrire le programme utiliser un éditeur de texte simple tel que Kate, Gedit ou encore Sublime (s il est disponible). N oubliez pas d inclure (#include <...>) les en-têtes cstdlib et iostream, qui font partie de la bibliothèque standard du C++. 1.1 Compilation Dans un premier temps, nous ferons la compilation à la main. Nous utiliserons le compilateur GNU pour cela, qui fait partie de la GNU compiler collection (gcc). Bien que le programme gcc permette de compiler des fichiers C++, il n inclut pas automatiquement la bibliothèque standard du C++. Pour cela, il faut utiliser le programme g++ La commande pour compiler notre hello world est donc g++ -Wall -Werror -Wold-style-cast hello_world.cpp -o hello_world où hello_world.cpp est le fichier à compiler et hello_world est le nom du programme à générer. L option -Wall active tous les warnings et l option Werror transforme les warnings en erreurs, ce qui a pour effet d interrompre la compilation en cas de warnings Exécutez hello_world pour tester :./hello_world Cet exercice est terminé lorsque votre code compile sans aucun warning et que son execution est correcte. Tous les warnings peuvent être éliminés par de simples modifications du code. Il est important de le faire, car si on laisse traîner des warnings inoffensifs, on finit par ne plus voir les warnings pertinents, ce qui les rends totalement inutile! 2 QtCreator En pratique utiliser la ligne de commande pour compiler les gros projets devient rapidement ingérable à cause du nombre élevé de fichiers. Dès lors, on a recours à des systèmes (e.g., CMake, Make, Scons, ) de compilation. De plus, pour augmenter la productivité des éditeurs qui intégrent la compilation, le debugging et la réalisation d interface graphiques sont disponibles. Dans le cadre de ces TDs ainsi que pour votre module de projet en C++, nous avons choisi d utliser QtCreator. 1
QtCreator un outil de développement qui intégre de nombreuses fonctionnalités et permet de choisir, le système de gestion de compilation ainsi que le compilateur qui sera utilisé conjointement. De plus, il est gratuit et est disponible sur les principales plateformes (Windows, MacOS X, Linux). La Figure 1 vous présente l interface graphique de QtCreator lorsque vous le lancer. Figure 1 QtCreator à l ouverture 1 - Onglets principaux du programme. Edit pour taper le code, Debug pour le débugguer, Projects pour changer les options de compilation et d exécution et enfin Analyse pour lancer la détection de fuites mémoires. 2 - Permet de choisir entre la compilation en mode release ou debug. 3 - Permet d éxécuter le code en release (Ctrl+R). 4 - Permet d éxécuter le code en debug (F5). 5 - Permet de seulement compiler le code (Ctrl+B). 6 - Barre de recherche de fichiers ou d expressions régulières. 7 - Séléction des sorties : 1 - Issues : Affiche et permet de sélectionner rapidement les erreurs et les avertissements de la dernière compilation. 2 - Search Results : Affiche le résultat de la barre de recherche. 3 - Application Output : Affiche tous std::cout/std::cerr du programme. 4 - Compile Output : Affiche la sortie du programme de compilation. 3 Projets Dans QtCreator il est possible de gérer facilement de gros projets. Pour cela, il y a deux solutions QMake et Cmake. 2
3.1 Projet QMake Gestionnaire natif de Qt, il est complètement integré à QtCreator. Pour créer un projet QMake : "File", "New", "Qt gui Application". A la fin de la configuration, toutes les informations relatives aux fichiers sources, aux librairies et aux options de compilation sont présentes dans le fichier nom_du_projet.pro. 3.2 Projet CMake CMake est également un outil de gestion de projet. Il présente l avantage de ne pas être dépendant de Qt et de fonctionner sur un grand nombre de systèmes d exploitations. QtCreator gère également très bien les projets CMake : "C++ Project (CMake Compilation)". "File" "New" "Non-Qt Project" A la fin de la configuration, toutes les informations relatives au projet sont stockées dans le fichier CMakeLists.txt. 3.3 Travail à la maison avec QtCreator Quelque soit la plateforme (Windows, MacOS, Unix) la solution la plus simple afin d installer Qt et QtCreator est d aller sur la page d installation Qt : http://qt-project.org/downloads et de cliquer sur "Download Here". Télécharger la version "Community"de Qt qui est gratuite. 3.4 Travail à la maison sans QtCreator Sous Ubuntu/Debian: Pour installer Qmake : Installation sous ubuntu/debian : sudo apt get i n s t a l l qt5 qmake Compilation et Exécution : mkdir b u i l d cd b u i l d qmake [ Emplacement du f i c h i e r. pro ] make. / [Nom du f i c h i e r e x e c u t a b l e ] Pour installer CMake: sudo apt get i n s t a l l cmake Compilation et Exécution : mkdir b u i l d cd b u i l d cmake [ Emplacement du f i c h i e r CMakeLists. txt ] make. / [Nom du f i c h i e r e x e c u t a b l e ] 4 Conventions de codage Afin de produire du code propre et lisible, il est nécessaire de fixer un certain nombre de règles de style. Ces règles forment un standard de codage qui facilite la lecture, l écriture et le partage du code, tout particulièrement lorsque plusieurs personnes travaillent sur un même projet. Les 3
conventions de codage que vous devez suivre sont disponibles à l URL suivante : manao.inria. fr/perso/~pac/teaching/cpp/conventions-codage.pdf Exercice 4.1 Projet QtCreator avec CMake 1. Créer un projet QtCreator (nommez le Hello) de type Non-Qt Project avec CMake. 2. Familiarisez vous avec les différents boutons (compilation et execution du programme) 3. Modifiez votre code afin que la fonction main renvoie EXIT_SUCCESS plutôt que 0 4. Modifiez votre code afin que la fonction main puisse recevoir des arguments 5. Executez votre programme depuis la ligne de commande (terminal). Pour ce faire ouvrez un terminal et rendez vous dans le répertoire où l executable est créé. Ce répertoire est indiqué dans les propriétés de votre projet QtCreator. 6. Modifiez votre programme afin qu il affiche tous ses argument sur la sortie standard. 7. À quoi correspond l argument 0? 8. Complétez le programme afin qu il calcule et affiche la moyenne des nombres passés en paramètres au programmes. Si le programme est appelé sans argument ou si un argument est invalide, affichez un message d erreur et retournez EXIT_FAILURE. A présent pour chaque exercice pour créerez un projet QtCreator. Pour chaque exercice il y aura une fonction main qui illustre le fonctionnement de ce qui est demandé. 5 Autres outils Cette section vous présente d autres outils liés à la progammation en C++, il n est pas nécessaire d y jetter un oeil en séance mais ils vous seront utiles pour votre projet. 5.1 Documentation du code Nous utilisons un programme appelé Doxygen pour générer la documentation de notre code. Celuici a besoin d un fichier de configuration (Doxyfile) permettant de paramétrer de nombreuses options. Nous fournissons un Doxyfile, déjà configuré pour produire des fichiers html, dans le répertoire doc. Générez la documentation en allant dans le répertoire doc puis en tapant la commande doxygen Ouvrez ensuite le fichier doc/html/index.html, puis allez voir la documentation du ficher hello_world.cpp. Pour générer la documentation, Doxygen utilise des commentaires spéciaux. Il en existe plusieurs type, mais les plus commun sont ceux de la forme /**... */ (style javadoc) ou /*!... */ (style Qt). Sauf instruction contraire, ces commentaires sont associé à la prochaine définition dans le code. Ainsi, le bloc de commentaire avant la fonction main est automatiquement associé à la fonction main. En revanche, le bloc au début du fichier contient la commande spéciale \file qui indique que le commentaire est associé au fichier courant. Cela est obligatoire pour les fichier car il n est pas possible de placer un commentaire avant un fichier. Attention : il est nécessaire de documenter les fichiers, sans quoi les définitions qu ils contiennent risquent de ne pas apparaître dans la documentation! À l intérieur des blocs de commentaires, de nombreuses commandes sont disponibles. La commande \brief est un résumé succinct qui apparaît lorsque les déclarations sont listées; elle devrait être toujours présente. Les commandes \param permettent de documenter les différents 4
paramètres et la commande \return documente la valeur de retour. Les (nombreuses) autres commandes sont décrites dans la documentation de Doxygen : http://www.stack.nl/~dimitri/doxygen/manual.html Dans les TPs, il est demandé de documenter systématiquement les fichiers, les fonctions, les classes ainsi que les membres des classes (attributs et méthodes). En somme la documentation de votre code génère votre compte-rendu et elle n est donc en aucun cas optionnelle. 5.2 Analyse statique du code Un certain nombre d erreurs de programmation courantes peuvent être détectées automatiquement en analysant le code. GCC émet déjà un certains nombre de warnings lorsqu il détecte des constructions qui lui semblent douteuses, cependant cette analyse est relativement limitée. Nous vous proposons d utiliser cppcheck. Ce n est en rien obligatoire mais cela constitue une bonne habitude qui pourra vous être très utile pour les projets. Vous pouvez tester votre code en tapant simplement cppcheck --enable=style. L option --enable=style définie quels tests sont effectués. Vous pouvez utiliser --enable=all pour activer tous les tests. Pensez à utiliser cette commande régulièrement pour vérifier que votre code ne contient pas d erreurs. Attention cependant, les messages de cppcheck ne sont pas toujours des erreurs, mais parfois juste des conseils. 5