Les différentes étapes

On peut voir les différentes étapes de la compilation avec l’option -v de gcc

gcc -v toto.c

Les principales étapes sont :

  1. Passage du préprocesseur
  2. Complétion
  3. Assemblage
  4. Édition de liens

Il est possible d’interrompre le compilateur après chacune des étapes pour observer le résultat :

gcc -E hello.c -o hello.i
gcc -S hello.c
gcc -c hel

Les différents codes objet (.o) peuvent ensuite être combinés dans un programme exécutable avec l’éditeur de liens : ld

Compilation séparée

Pour de gros projets, le code source est généralement réparti dans plusieurs fichiers .c (unités de compilation)

Pour construire l’executable, il faut assembler les différentes unités de compilation.

Deux solutions :

  1. Tout compiler en une seule fois

    gcc -g -Og  -Wall -Wextra Fichier1.c Fichier2.c nom_programme
    
  2. Compiler chaque fichier séparément et assembler le tout

    gcc -g -Og  -Wall -Wextra Fichier1.c -c Fichier1.o
    gcc -g -Og  -Wall -Wextra Fichier2.c -c Fichier2.o
    
    gcc -g  -Og -Wall -Wextra Fichier1.o Fichier2.o nom_programme
    

Répartir le code dans plusieurs fichiers

#include <stdio.h>

int main(void){
	printf("L'age du capitaine est %d\\n",age(2024));
	return 0;
}
int age (int annee){
	return annee - 1903;
}

<aside> ⚠️ Compiler maintenant mênera à une erreur !

</aside>

#include <stdio.h>
#include "age.h"

int main(void){
	printf("L'age du capitaine est %d\\n",age(2024));
	return 0;
}
#include "age.h"
int age (int annee){
	return annee - 1903;
}
#ifndef AGE_H // garde contre les inclusions multiples
#define AGE_H
int age(int annee); // déclaration
#endif

<aside> ☝ Utiliser des "" pour indiquer qu’il faut chercher le fichier dans les repertoire du projet et non dans les répertoires courant (<>)

</aside>

Automatiser la compilation : l’outil make

L’outil make permet d’automatiser la compilation et de ne recompiler que ce qui est nécessaire.

Pour cela, on décrit le projet dans un fichier appelé MakeFile