Compiler avec gcc¶
Le but de cet article est de vous familiariser avec le compilateur GNU C, gcc. Il concentre les options et les constructions de la ligne de commande qui sont spécifiques à gcc.
Il explique:
comment dire à gcc quel dialecte du C il doit s’attendre à rencontrer
quelles variétés de constructions à usage spécifique sont soutenues par gcc
comment les invoquer et les utiliser
Interprétation des options¶
Le compilateur gcc accepte à la fois les options à une seule lettre (eg. -c, -p…), et les options à plusieurs lettres (eg. -ansi, -shared…). Comme il accepte les deux types d’options, vous ne pouvez pas regrouper plusieurs options à une seule lettre comme vous pouvez en avoir l’habitude avec les nombreux programmes GNU et Unix/Linux.
Par exemple, l’option multilettre -pg n’est pas la même que les deux options à une lettre -p -g. En effet, l’option -pg crée un code supplémentaire dans le binaire final qui produit des informations de profil pour le profileur de code GNU, gprof. Et, les options -p -g génèrent un code supplémentaire dans le binaire résultant qui produit des informations de profilage destinées à être utilisées par le profileur de code prof (-p) et fait en sorte que gcc génère des informations de débogage en utilisant le format normal du système d’information (-g).
vous êtes, de manière générale, libre de mélanger l’ordre des options et de compiler les arguments car dans dans la plupart des cas, l’ordre des options et leurs arguments n’ont pas d’importance.
Il peut être important lors de l’utilisation de plusieurs options du même type. Par exemple, l’option -I spécifie le répertoire ou les répertoires où rechercher des fichiers d’inclusion. Ainsi, si vous spécifiez -I plusieurs fois, gcc recherche les fichiers dans l’ordre indiqué.
Compilation des dialectes C¶
Le compilateur gcc supporte une variété de dialectes du C via une série d’options en ligne de commande qui permettent à la fois des caractéristiques uniques et des gammes de caractéristiques spécifiques à des variantes particulières du langage C.
La raison la plus courante de compiler un code pour un dialecte spécifique du C est la portabilité. Si vous souhaitez écrire un code compilable par des outils différents, vous pouvez vérifier si ce code est respecté. La vérification de l’adhésion à diverses normes est l’une des méthodes utilisées par les développeurs pour réduire le risque de se retrouver à court de temps faute de problèmes de compilation et d’exécution lorsque le code est déplacé d’une plate-forme à une autre, en particulier lorsque qu’une plateforme cible n’a pas été prise en compte lors de la rédaction initiale du programme.
Pour commencer¶
Afin de commencer avec un exemple simple, voici comment compiler un programme C composé d’un fichier source unique nommé exemple.c pour obtenir un exécutable nommé a.out:
$ gcc exemple.c
Toujours avec le même source, mais cette fois-ci pour obtenir un exécutable nommé exemple:
$ gcc exemple.c -o exemple
Vérifier la conformité du code¶
En C il est possible d’écrire des programmes pas tout à fait conformes, mais qui se compilent quand même et peuvent avoir un comportement non souhaité, voir compromettre la sécurité du système. Afin d’avoir quelques retour du compilateur sous forme de warning, utiliser les options -Wall et -Wextra comme ceci:
$ gcc exemple.c -o exemple -Wall -Wextra
Ces options permettent d’activer tous les warnings lors de la compilation. Si on le souhaite, il est possible d’ajouter l’option -Werror pour transformer les alertes (warnings) en erreur critique:
$ gcc exemple.c -o exemple -Wall -Wextra -Werror
Options de gcc par défaut¶
Selon la distribution utilisée gcc utilise des options par défaut. Un moyen simple de les lister est d’utiliser la commande:
$ gcc -Q --help=target