GCC

De Ensiwiki
Aller à : navigation, rechercher

GCC est un compilateur. C'est plutôt une suite de compilateurs, créée et maintenue par le GNU, pour différents langages, mais principalement le C (sous la forme de gcc(1)) et le C++ (sous la forme de g++(1) surtout).

Si vous avez un souci, consultez Les Erreurs de GCC.

Quelques options utiles de GCC

Si vous avez déjà lu ou tenté de lire la man page de GCC, vous savez sans doute qu'il dispose d'une panoplie d'options impressionante. Ici, nous allons essayer de récapituler les principales, que vous avez sans doute déjà vues en cours, dont vous avez peut-être perdu les notes, le poly, ou celui des deux qui était utile.

Pour le C

Options sans lesquelles rien ne marche (enfin, ça dépend de ce que vous voulez faire bien sûr... faut pas tout mettre à la fois) :

  • -c : compilation séparée (compilation seule, pas d'édition de liens) ;
  • -llib : lie une bibliothèque à votre programme, doit apparaître après les fichiers qui l'utilisent, sur la ligne de commande ;
  • -o sortie : nomme le fichier de sortie ;
  • -g : génère des informations de debug (i.e. vous permet d'utiliser gdb ou ddd normalement), si vous ne voulez pas mourir...

Options facultatives que vous feriez mieux de connaître :

  • -Wall : active la majorité des avertissements (vous pouvez en désactiver certains au cas par cas, après, si vous savez ce que vous faites) ;
  • -Wextra (-W sur les vieilles versions, c'est un grand W, le petit supprime tous les avertissements...) : active des avertissements supplémentaires ;
  • -Werror : transforme tous vos avertissements en erreurs : ils feront échouer la compilation ; si vous l'utilisez, il est prudent de ne pas l'inclure par défaut dans vos scripts de compilation ; si quelqu'un d'autre que vous, avec une autre version du compilateur qui émet d'autres avertissements, essaie de compiler votre code, ça peut faire mal...
  • -pedantic : essaie de détecter quand vous faites des choses pas standard, « pedants make good programmers » comme dit l'autre (c.l.c, je ne sais plus qui) ;
  • -ansi : se conforme à la norme ANSI, ce qui signifie surtout que vous n'aurez pas accès aux définitions POSIX qui sont dans les en-têtes standards (stdio.h, stdlib.h, etc.) ; en pratique, -pedantic est plus utile ;
  • -O0 (O majuscule zero), -O1, -O2, -O3 : niveaux d'optimisation ; un truc à savoir, c'est qu'au niveau 0, vous n'avez pas certains avertissements liés à l'analyse de graphe (avertissements en rapport avec les identificateurs non inutilisés ou utilisés avant leur initialisation), mais qu'au niveau 1, vous risquez d'avoir des surprises si vous essayez de déboguer ; pour déboguer avec du -O1, il vous faut -fno-inline ou autre qui supprime l'inlining précis qui vous gêne (genre -fno-inline-functions-called-once). L'option -O1 optimise le code en rapidité sans trop faire augmenter la taille du binaire, alors que les options -O2 et -O3 font des optimisations plus poussées qui peuvent générer un binaire bien plus gros. L'option -Os optimise la taille du binaire généré.
  • -m32 : mode 32 bits. Utile pour les TPs de logiciel de base si vous travaillez sur une machine 64 bits, mais que vous programmez en assembleur 32 bits.

Si vous débutez vraiment et ne savez pas quoi prendre, optez pour -g -Wall -Wextra -pedantic.

Options qui vous seront peut-être utile un jour :

  • -pipe : ne produit pas de fichier temporaire. Accélère un peu la compilation mais consomme plus de mémoire.
  • -pg : vous permet de faire du profiling (analyse de performances détaillée) sur votre programme.