Vue d’ensemble
Dans l’écosystème GNU/Linux, l’appel direct de la commande c++ dans le terminal suscite fréquemment des interrogations : s’agit-il d’un compilateur autonome ou d’un alias vers g++ ? Cet article décortique la mécanique interne de cet utilitaire système, met en lumière ses liens avec la suite GCC et détaille les étapes pratiques pour compiler et exécuter efficacement vos programmes C++.
Préparation de l’environnement de build et vérification de version
Afin de doter un poste de travail Ubuntu de toute la chaîne de compilation native (compilateurs C/C++, bibliothèque C standard et utilitaires make), nous déployons le métapaquet incontournable build-essential après synchronisation de l’index des dépôts :

L’utilitaire which permet d’inspecter les répertoires du $PATH pour identifier l’emplacement exact de l’exécutable c++ pris en compte par votre interpréteur :

L’option d’interrogation de version (c++ --version) dévoile les détails de construction du compilateur sous-jacent ainsi que la révision active de GCC.
⚙️ [Options de compilation fondamentales]
-o <file> : Définit le nom et l’emplacement du binaire exécutable généré après l’édition de liens.-c : Interrompt le processus après la génération du fichier objet (.o), sans déclencher l’éditeur de liens.-Wall : Active la plupart des avertissements recommandés afin de repérer les anomalies potentielles dans le code.-O2 : Applique un compromis d’optimisation robuste garantissant d’excellentes performances d’exécution sans surcoût excessif sur la taille du binaire.-std=<standard> : Spécifie expressément la norme de langage C++ ciblée (par exemple c++17 ou c++20).-g : Intègre les symboles de débogage pour faciliter l’analyse pas à pas dans GDB.

Architecture des liens symboliques : anatomie de /usr/bin/c++ face à g++
L’examen détaillé des métadonnées de /usr/bin/c++ à l’aide de ls -l met en évidence la structure de redirection sous-jacente propre aux distributions Debian et Ubuntu :

Pour déterminer vers quel binaire physique converge cet alias, l’inspection du système d’alternatives ou la résolution canonique via readlink -f expose la cible finale du compilateur (généralement une version précise de g++) :

Création d’un premier programme, compilation et exécution
Mettons en pratique la chaîne d’outils en écrivant un fichier source minimal hello.cpp destiné à tester le flux de sortie standard :

Nous invoquons à présent le compilateur c++ en combinant l’optimisation et la détection d’anomalies de code pour générer le binaire hello. Conformément à la philosophie Unix, l’absence de message en retour confirme le succès de l’opération :

Il ne reste plus qu’à lancer le fichier exécutable fraîchement produit au sein du répertoire courant afin de valider la restitution du texte sur le terminal :

Compilation moderne avec le standard C++20 (-std=c++20)
Afin d’illustrer la prise en charge des spécifications modernes du langage, nous rédigeons un script modern.cpp tirant parti de std::string_view et de l’évaluation à la compilation permise par constexpr :

Le drapeau -std=c++20 indique au moteur de compilation d’activer les règles grammaticales de cette norme. La commande produit l’exécutable modern sans avertissement si le code respecte scrupuleusement le standard :

L’exécution immédiate du binaire produit permet de vérifier la conformité du comportement attendu dans l’environnement Ubuntu :

Vous disposez désormais d’une vision claire sur le rôle de la commande c++, son articulation avec g++ et les méthodes de compilation fondamentales sous Linux. En combinant judicieusement ces options de base, vous serez en mesure de structurer des environnements de build C++ fiables et performants.