Test de l'EDI C/C++ Code::Blocks

Laurent Gomila

Gratuit, puissant et en constante évolution, Code::Blocks est pourtant un environnement de développement peu connu. Voici un test qui je l'espère vous permettra de mieux le connaître et l'apprécier. ♪

- Titre : Test de l'EDI C/C++ Code::Blocks

- Auteur : Laurent Gomila

- Parution : 5 septembre 2005

- Mise à jour : 5 septembre 2005

- Licence : Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2005 Laurent Gomila. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Présentation

- I-A. Description rapide

- I-B. Caractéristiques

- II. Premiers pas

- III. Gestion des projets

- IV. L'environnement

- V. L'éditeur de texte

- VI. Les compilateurs

- VII. Les plugins

- VII-A. Source code formatter (AStyle)

- VII-B. Class wizard

- VII-C. ToDo list

- VII-D. Dev-C++ devpack updater / installer

- VII-E. Créer son propre plugin

- VIII. Conclusion

I - Présentation

Ce qui suit est valable pour la dernière version disponible au moment où a été rédigé cet article (version 1.0 RC1-1), il est donc tout à fait possible que l'EDI ait évolué et se soit enrichi depuis.

I-A - Description rapide

Code::Blocks est un environnement de développement gratuit et multiplateforme (Linux et Windows), développé pour coller au mieux aux demandes des utilisateurs. Conçu autour d'une architecture de plugins, il est ainsi extensible et configurable très facilement ce qui lui permet d'évoluer très vite. L'un de ses principaux atouts est de pouvoir s'interfacer avec la plupart des compilateurs gratuits du marché : VC++ toolkit, MinGW… Une version contenant MinGW est d'ailleurs disponible si vous ne possédez pas encore de compilateur.

I-B - Caractéristiques

Voici pêle-mêle une liste non exhaustive de ses principales caractéristiques :

- open source (sous licence GPL2) ;

- multiplateforme (utilise WxWidgets) ;

- extensible via un système de plugins ;

- support de plusieurs compilateurs (Visual C++ 2003, MinGW, Borland C++ 5.5, Digital Mars, Open Watcom) ;

- peut compiler directement ou via un makefile ;

- support de templates de projets (possibilité d'écrire des templates personnalisés) ;

- gestion des espaces de travail (workspaces)

- importation des projets VC++ et Dev-C++ ;

- interfaçage avec GDB pour le débogage ;

- coloration syntaxique ;

- repliage de code ;

- code-completion ;

- explorateur de classes ;

- indentation automatique ;

- outils externes configurables ;

- gestion des listes de « TODO ».

Comme vous le voyez, Code::Blocks offre a priori toutes les fonctionnalités sympathiques qu'on est en droit d'attendre d'un EDI, tant au niveau de l'interface que de l'éditeur de texte ou de la compilation. D'ailleurs concernant ce point, la liste des compilateurs supportés est d'ores et déjà très complète, et le système de plug-in permettra de l'enrichir très facilement au fur et à mesure des nouvelles versions. Un très bon point.

Entrons à présent dans le vif du sujet, et voyons si cet EDI si prometteur tient toutes ses promesses.

II - Premiers pas

Lorsqu'on lance pour la première fois Code::Blocks on ne se sent pas perdu : il ressemble en effet à ses congénères. Menus habituels, vue des projets, fenêtre de sortie pour le compilateur ou le déboguer, arborescence des fichiers sources, barre d'outils agrémentée de boutons pour compiler, déboguer, rechercher… Code::Blocks semble à première vue posséder tout ce qu'il faut.

Vue globale de l'environnement

Vient ensuite la création de notre premier projet. Le menu « Fichier -> New project » (ou le bouton correspondant dans la barre d'outils) permet de créer d'un coup de main une base de projet. Les templates classiques sont de la partie : application console, application Windows, bibliothèque statique et bibliothèque dynamique, mais aussi des templates bien sympathiques comme des projets OpenGL, SDL, Qt, Ogre, ou encore WxWidgets. Chacun de ces projets étant bien entendu correctement paramétré et agrémenté (si on le souhaite) d'un code source minimal permettant de compiler et exécuter notre projet, ce qui est un point très appréciable.

Création d'un nouveau projet

On peut également si on le désire créer très simplement nos propres templates de projet : il suffit de créer un nouveau projet correctement paramétré et agrémenter des fichiers sources souhaités, puis de le sauvegarder via le menu « Project -> Save project as user template ». Ceux-ci seront ensuite disponibles dans l'onglet « User templates » de la fenêtre de création de projets.

Une fois notre projet créé, celui-ci vient s'ajouter au workspace courant et est prêt à être édité / compilé / exécuté.

III - Gestion des projets

Comme précisé précédemment, Code::Blocks permet d'organiser ses sources en projets, et de regrouper ses projets en espaces de travail (workspaces).

Organisation arborescente des projets

La gestion des projets se révèle plutôt complète. Un clic droit sur l'un d'eux (ou sur le menu « Project ») permet d'accéder aux options qui leur sont associées, parmi lesquelles on peut bien sûr retrouver les options habituelles : ajout / retrait de fichiers, directives de compilation « compiler / reconstruire / nettoyer », options du projet, organisation de l'arborescence…

Les options de construction de projets sont bien foutues et plutôt complètes : on peut choisir le compilateur à utiliser pour chaque projet, créer des configurations de construction (debug ou release par exemple) et spécifier une à une des options du compilateur indépendamment des options générales que l'on a déjà définies.

Options de construction des projets

On peut également spécifier des options pour un fichier seul : choisir de ne pas le compiler ou le lier, l'enlever de certaines configurations de construction, ou encore lui assigner une priorité. On peut également ajouter des commandes spécialisées de construction, mais ceci est déconseillé (par un bel avertissement rouge au bas de la fenêtre) à moins que vous ne sachiez exactement ce que vous faites.

Une fonctionnalité très intéressante offerte par Code::Blocks est l'importation de projets Visual C++ 6, Visual Studio, et Dev-C++. Après quelques tests on peut s'apercevoir que tout est bien importé : organisation des projets / répertoires / fichiers, différentes configurations de compilation (debug / release par exemple), options de compilation, options de l'éditeur de lien… A priori rien ne manque, et si c'était le cas (car ça l'est sûrement) les développeurs de l'EDI nous assurent travailler constamment à la correction de ces manques.

IV - L'environnement

L'environnement est classique, mais pour le moins complet. Pour tout dire, il ressemble d'ailleurs assez à celui de Visual Studio 2003. La première impression est bonne : on se trouve face à un environnement au look Windows classique, coloré et plein de boutons comme on les aime. La prise en main ne pose aucun problème, Code::Blocks se révèle plutôt intuitif d'utilisation.

On retrouve à gauche un explorateur permettant de se balader au choix : dans l'arborescence de projets / fichiers sources, dans les symboles (fonctions, variables…) ou de scruter la liste des variables « watches ». Petit bémol : on ne peut que choisir de placer cette fenêtre à droite ou à gauche, mais aucun positionnement perso ou choix des onglets affichés n'est proposé.

Vient ensuite la fenêtre d'édition de code. Celle-ci bénéficie de quelques gadgets sympathiques comme l'affichage par onglets ou le repliage de code. Il manque à première vue un menu contextuel ou des boutons sur les onglets (pour les fermer par exemple), mais en farfouillant dans les options de l'environnement, on trouve une option ajoutant une petite croix de fermeture à côté de ceux-ci. Ouf !

La barre d'outils offre des raccourcis boutons pour les tâches les plus courantes (gestion des fichiers, compilation, recherche…), mais n'est malheureusement absolument pas personnalisable. Ou du moins presque : on peut tout de même choisir la taille des boutons, 16x16 ou 32x32. Enfin, on peut parier qu'une meilleure personnalisation apparaîtra dans une prochaine mise à jour.

Pour conclure avec ce tour d'horizon de l'environnement, on trouve en bas la sempiternelle console de sortie. Celle-ci bénéficie également d'un affichage par onglet, et permet d'afficher les informations de Code::Blocks (ouverture d'un workspace, importation d'un projet…), les résultats de recherche, la sortie « brute » de compilateur, un rapport des erreurs et avertissements, la sortie debugger et une ToDo-list. Une option permet de replier la console lorsqu'on n'en a pas besoin. Autre détail appréciable : l'onglet actif change selon l'action qui vient d'être exécutée.

Enfin on pourra noter que l'environnement est stable, les plantages et bugs se faisant très rares et étant la plupart du temps bénins. Un bon point par rapport à Dev-C++.

V - L'éditeur de texte

L'éditeur de texte de Code::Blocks n'a pas à pâlir devant la concurrence : il possède tous les gadgets de base et à la mode (coloration syntaxique, autocompletion, repliage de code, indentation automatique, et j'en passe). Certaines options sont plutôt sympathiques : on peut par exemple spécifier un texte par défaut pour tout nouveau fichier source ou en-tête créé. Une autre fonctionnalité sympa, à ne pas confondre avec le plug-in d'autocompletion, est l'autocomplete. Tapez un mot-clé, Ctrl-J, et Code::Blocks écrira la suite comme un grand ; les mot-clés reconnus ainsi que le texte correspondant sont entièrement paramétrables via le menu de l'éditeur.

Autre gadget pratique : la possibilité en un clic d'automatiser l'implémentation ou la déclaration d'une fonction membre via une boîte de dialogue. Comble du raffinement, la fonction écrite est surmontée d'un bloc de description compatible avec les documenteurs automatiques de code tels que Doxygen.

On pourra par contre noter l'absence de fonctionnalités que l'on peut retrouver par exemple dans Visual Studio 2003 : « ouvrir le fichier sous le curseur », ou encore « trouver la définition de l'identifiant sous le curseur ». Mais bon, on ne va pas trop pinailler sur ça.

La coloration syntaxique est également plutôt sympa. Elle est elle aussi totalement paramétrable dans les options de l'éditeur : on peut choisir le style / couleur de chaque catégorie de mots reconnus, on peut créer plusieurs profils de couleurs, et on peut même bénéficier d'une coloration syntaxique pour autre chose que le C / C++ (asm, XML, Lua…).

L'autocompletion (la « vraie ») est quant à elle plutôt décevante : elle fait défaut trop souvent et n'est pas automatisable (nécessité d'aller appuyer sur Ctrl-J systématiquement). Ses performances par contre ont l'air correctes, aucun lag n'a été remarqué durant les tests.

VI - Les compilateurs

Comme annoncé, Code::Blocks permet d'utiliser moult compilateurs gratuits du marché :

- GCC ;

- MinGW ;

- Visual C++ toolkit 2003 ;

- Borland Compiler 5.5 ;

- Digital Mars ;

- Open Watcom.

… pour le moment, mais nul doute que cette liste continuera de s'agrandir et restera à jour grâce à l'évolutibilité offerte par le système de plugins. Ainsi, Code::Blocks se pose comme la solution de choix (la seule ?) pour interfacer votre compilateur gratuit préféré avec une interface qui n'a rien à envier à ses consœurs payantes.

La première chose remarquable à noter lorsqu'on commence à bidouiller dans les options des compilateurs, est que tous les compilateurs sont correctement paramétrés par défaut : les chemins d'en-têtes et de bibliothèques sont correctement définis, et les différents executables nécessaires (compilateur, lieur, débogueur…) sont tous bien présents, chemin et nom corrects. Les compilateurs présents sur votre système ont même tous été correctement détectés et leur chemin correctement spécifié. Ainsi pour compiler votre premier programme vous n'aurez probablement pas à toucher une seule option, ce qui est plus qu'appréciable. Bien sûr cela ne veut pas dire qu'il ne faudra rien paramétrer : les options du compilateur sont toutes décochées, et les répertoires supplémentaires (comme /PlateformSDK pour Visual C++) ne sont pas ajoutés. Au niveau des options en elles-mêmes pas de souci à se faire : chaque compilateur retrouvera bien ses propres options, aucun amalgame n'a été fait à ce niveau. Bien sûr vous pouvez toujours également ajouter des arguments à la ligne de commande, si l'une ou l'autre des options n'est pas présente dans la liste des cases à cocher. Petit détail qui a son importance : on pourra également noter que la mise en page des options est plutôt agréable.

Paramétrage des compilateurs

Je n'ai pas pu tester tous les compilateurs en long et en large, mais les essais réalisés avec Visual C++ 7.1 et MinGW (gcc 3.3.1) se sont révélés sans mauvaise surprise, et nul doute que c'est également le cas pour les autres compilateurs.

Un petit mot également sur le debugging : il est parfaitement opérationnel (pour GDB du moins). L'éditeur se place correctement sur la ligne fautive, les variables observées sont bien à jour, la pile d'appels s'affiche correctement à la demande, et on peut si l'on veut entreprendre une exécution pas à pas.

VII - Les plugins

Aspect réellement le plus novateur de cet environnement de programmation, le système de plugin offre à Code::Blocks une flexibilité et une évolutivité intéressantes. C'est cela qui permet à Code::Blocks de ne rien avoir à envier aux EDI commerciaux, et de s'enrichir de jour en jour.

Afin de vous faire une idée de ce qu'apportent les plugins, voici une brève présentation de quelques-uns livrés avec l'environnement.

VII-A - Source code formatter (AStyle)

Ce plugin permet comme son nom l'indique de formater automatiquement votre code source. Vous pouvez choisir un style de formatage prédéfini par exemple ANSI, K&R, Linux, GNU, Java, ou bien paramétrer en détail votre formatage préféré. De nombreuses options de mise en page sont proposées pour personnaliser l'indentation, les espaces, le parenthesage, etc.

VII-B - Class wizard

Ce petit plugin bien sympathique permet d'automatiser un peu la création de classes. Il ouvre une boîte de dialogue, vous remplissez les différents champs, et hop vous voilà avec le .h et le .cpp de votre classe, correctement remplis.

VII-C - ToDo list

Ce plugin permet de maintenir à jour très facilement une liste de « TODO ». L'ajout dans le code se fait via le menu contextuel (clic droit) et une boîte de dialogue ; la liste quant à elle est toujours disponible dans la fenêtre d'output. Plutôt pratique !

VII-D - Dev-C++ devpack updater / installer

Ce plugin permet d'installer et de gérer très facilement les devpacks de Dev-C++.

VII-E - Créer son propre plugin

L'une des fonctionnalités qui rendent ce système de plugin si intéressant est que n'importe qui peut développer son propre plugin assez facilement. Vous aurez besoin pour cela :

- du SDK CodeBlocks, téléchargeable sur la page « Dowloads » du site officiel ;

- de WxWidget (voir Compiling wxWidgets 2.6.1 to develop Code::Blocks) ;

- de l'assistant à la création de plugin, dans le menu « Plugins -> Code::Blocks plugin wizard ».

Les détails de la création d'un plugin ne seront pas détaillés ici, ceci étant très bien fait sur la page du wiki Creating a simple « Hello World » plugin.

Cette liste n'est bien sûr pas exhaustive ; étant donné la facilité de développement, nul doute qu'elle viendra s'enrichir de nombreux nouveaux plugins dans les prochaines versions de l'EDI.

VIII - Conclusion

Ce test ne prétend pas être complet, il s'agissait tout d'abord d'effectuer un tour d'horizon de cet EDI qui je l'espère vous aura permis de mieux le connaître et d'en apprécier la puissance. En outre, certaines fonctionnalités ou options m'ont sûrement échappé et vous ne manquerez pas de les découvrir par vous-même.

Code::Blocks est un environnement de développement surprenant. Gratuit, multiplateforme, en constante évolution et compatible avec la plupart des compilateurs gratuits du marché, il offre une solution plus qu'intéressante pour les développeurs amateurs ou n'ayant tout simplement pas des milliers de dollars à dépenser, et utilisant jusqu'alors un compilateur en ligne de commande. Code::Blocks n'a vraiment rien à envier aux environnements de programmation commerciaux, tant au niveau de l'éditeur de texte, de la gestion des projets, que des fonctionnalités et bénéficie d'une maintenance impressionnante.

Nul doute qu'il s'agit là d'un outil qui va encore énormément se développer, et bientôt avoir sa place parmi les grands.

Liens :

- Site officiel : http://www.codeblocks.org