Quelques flags utiles pour la compilation

Pour compiler un fichier C, il suffit d’utiliser la commande gcc fichier.c. Il existe plusieurs flags utiles à connaître :

-o fichier Ce flag permet de nommer l’exécutable “fichier”

-Wall Ce flag affiche tous les warnings. En effet, certains warnings comme le fait de définir une variable sans l’utiliser, n’apparaissent pas sans ce flag.

-Werror Ce flag transforme tous les warnings en erreurs. Cela peut paraître embêtant mais il n’est jamais bon de laisser des warnings dans un code. Il est toujours bénéfique de directement traiter ces warnings et -Werror vous empêchera de compiler le programme comme il considérera ces warnings comme des erreurs. A noter que l’utilisation combinée de -Wall et -Werror est une bonne pratique à adopter pour limiter au maximum les erreurs dans votre code.

Une autre chose à savoir est que la librairie standard (C) est chargée automatiquement sans que l’on doive le spécifier. En revanche d’autres librairies nécessitent des flags particuliers lors de la compilation. De manière générale, ces flags commencent par -l (library)

-lm Ce flag est nécessaire pour utiliser les fonctions de la librairie math qui sont définies dans <math.h>.

-lpthread Ce flag est nécessaire pour utiliser les fonctions de la librairie pthread qui sont définies dans <pthread.h>.

-lcunit Ce flag est nécessaire pour utiliser les fonctions de CUnit pour vos tests.

Un exemple d’utilisation de la commande gcc qui utilise ces flags serait : gcc fichier.c fichier -lcunit -lm -lpthread -Wall -Werror

Si vous rencontrez des problèmes pour trouver une librairie (Vous avez installé CUnit manuellement par exemple), et que vous rencontrez l’erreur “cannot find -lcunit” vous devez rajouter le chemin vers la libraire avec le flag -L Exemple si la librairie se trouve dans /home/user/local/CUnit/ :

gcc fichier.c fichier -lcunit -L/home/user/local/CUnit/ -Wall -Werror

On peut aussi créer soi-même une librairie et vouloir l’inclure dans d’autres fichiers. Imaginons que l’on crée la libraire “minmax” qui contient des fonctions permettant de calculer le minimum et le maximum entre deux nombres et que l’on veuille l’utiliser dans un fichier “fun.c”

Contenu de minmax.h

#include <stdio.h>

int min(int a, int b);
int max(int a, int b);

Contenu de minmax.c

#include "minmax.h"

int min(int a, int b) {
    if (a < b) {
        return a;
    }
    return b;
}

int max(int a, int b) {
    if (a > b) {
        return a;
    }
    return b;
}

Contenu de fun.c

#include "minmax.h"

int main() {
    printf("%d \n", min(1,3));
    printf("%d \n", max(1,3));
    return 0;
}

On effectue les commandes suivantes (le flag -c crée un objet .o) :

gcc -c minmax.c
gcc -c fun.c
gcc -o fun fun.o minmax.o

Et lorsque l’on lance le programme fun en faisant ./fun

1
3

Enfin, n’oubliez pas que la page de manuel contient beaucoup d’informations utiles : http://man7.org/linux/man-pages/man1/gcc.1.html

Ecrit le April 8, 2020