[C++] Compilateurs et environnements de développement
Pour le développement et la compilation de sources C++, il existe de nombreuses solutions pour chaque plate-forme, à la fois open source et commerciales.
Aujourd’hui, nous analyserons les outils les plus répandus, en particulier les outils gratuits, ainsi que le support offert par chacun d’entre eux aux différentes versions de la bibliothèque standard du C++.
Compilateurs C++
De nombreux compilateurs C++ sont disponibles gratuitement pour chaque plate-forme. Chacune d’entre elles est différenciée par les performances, les niveaux d’optimisation attendus pour différentes architectures matérielles et les normes de langage prises en charge.
Les projets open source incluent GCC (Gnu Compiler Collection), LLVM (machine virtuelle de bas niveau), avec son interface frontale C/C++ Clang, MinGW (Minimalist GNU for Windows) et MinGW-w64, un projet parallèle à MinGw qui prend en charge les architectures 64 bits.
Les deux premiers ont une approche multi-plateforme, même si la procédure d’installation sous Windows est quelque peu compliquée comparée à celle des systèmes Unix. MinGW et MinGW-w64 sont à la place des réimplémentations spécifiques au système Microsoft Windows de certains outils développés et maintenus dans le projet GNU.
Toutefois, si vous préférez utiliser un compilateur intégrant différents outils pour développer, déboguer un programme, vous pouvez utiliser MSVC++, le compilateur gratuit distribué par Microsoft pour les systèmes Windows, disponible depuis la version 2015 du package Visual C++ Build Tools.
Compiler en ligne de commande dans les environnements Unix
Le moyen le plus simple de commencer à programmer en C++ est probablement d’obtenir un système de type Unix, comme Linux ou Mac OS, et d’installer GCC.
Dans le cas de Linux, nous pouvons opter pour une installation réelle ou pour utiliser une machine virtuelle.
De nombreuses distributions fournissent des méta-packages qui vous permettent d’installer l’écosystème de développement complet C++. Sur les distributions basées sur Debian, ce paquet est appelé build-essential, tandis que sur les distributions basées sur RPM, les outils de développement C++ sont inclus dans le groupe Outils de développement.
Le nom de l’exécutable du compilateur GCC C++ est G++.
Pour compiler un seul fichier source avec G++, exécutez simplement la commande suivante dans un terminal:
g++ main.cpp -o test
Où main.cpp est le fichier qui contient notre code source et -o <nom> est l’option utilisée pour nommer le fichier exécutable. Si cette option est absente, le nom par défaut est a.out.
Cela suffit pour de nombreux exemples qui seront présentés dans les articles suivants. Cependant, si nécessaire, la compilation peut être étendue à plusieurs fichiers source avec la commande:
g++ *.cpp -o test
En réalité, plus souvent qu’autrement, il est plus pratique de laisser le processus de compilation démarrer par un environnement de développement spécifique. Par conséquent, de ce point de vue, nous n’analyserons pas en détail les différentes options du G++ pour la compilation, la configuration de liens et l’optimisation. Sauf dans des cas particuliers, nous nous limiterons à déléguer la responsabilité de la compilation de nos sources à l’EDI de notre choix et à nous concentrer exclusivement sur les constructions syntaxiques du langage et leur sémantique.
Bibliothèque standard du C++
Les normes de langage C++ sont identifiées de manière informelle par l’abréviation C++ XX, où XX représente les deux derniers chiffres de l’année de ratification de la norme.
La première version ISO est connue sous le nom de C++ 98 et constitue depuis longtemps la version de référence pour tous les environnements de développement. Elle est ensuite intégrée à la version suivante, appelée C++ 03, qui constitue davantage une correction véritable expansion. En fait, nous devons attendre la version C++ 11 pour observer des améliorations notables dans la sémantique du langage. Cette version de la norme, soumise à un long processus de révision, était provisoirement appelée C++ 0x, dans l’espoir que la ratification finale serait achevée avant 2010.
Cela a été suivi par la version C++ 14, qui intègre d’autres développements des constructions syntaxiques du langage. La version C++ 1z prévue pour 2017 est en cours de révision.
La prise en charge des normes les plus récentes, à partir de 2011, n’est pas universellement garantie par tous les compilateurs et, dans certains cas, il est nécessaire de l’activer explicitement. Cependant, dans la plupart des cas, nous avons tendance à adhérer aux dernières versions. Par exemple, GCC, qui depuis la version 6.1 a déjà adopté C++ 14 comme le standard par défaut, et Clang qui, bien que basé sur le standard C++ 98, accepte implicitement de nombreuses extensions C++ 11.
Le tableau ci-dessous montre l’état actuel du support offert par les compilateurs mentionnés ci-dessus.
Standard | GCC | Clang | MinGW | MinGW-w64 | MSVC++ |
---|---|---|---|---|---|
c++1z | 6.0 partiel | 3.5 partiel | – | – | 2015 partiel |
c++14 | 5.1 | 3.4 | 5.0 partiel | 4.0 partiel | 2013 partiel |
c++11 | 4.8.1 | 3.3 | 4.0 partiel | 3.0 partiel | 2012 partiel |
Évidemment, à chaque nouvelle version, chaque compilateur a la tendance à s’aligner sur la dernière norme, mais pour des raisons de compatibilité, nous pouvons être forcés d’utiliser une version plus ancienne qui ne prend peut-être pas en charge les constructions utilisées dans notre code source.
Lorsque cela se produit, le processus de compilation produit une série de messages d’erreur difficiles à déchiffrer, ce qui peut nous amener à rechercher des erreurs syntaxiques inexistantes. Par conséquent, si vous souhaitez expérimenter une version très récente du standard de langage, voire même une version expérimentale, il est bon de vous assurer que le compilateur est compatible.
Étiquette :build-essential, C++ 03, C++ 14, C++ 1z, C++ 98, Compilateur, environnement de développement, outils gratuits