On peut voir les différentes étapes de la compilation avec l’option -v
de gcc
gcc -v toto.c
Les principales étapes sont :
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
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 :
Tout compiler en une seule fois
gcc -g -Og -Wall -Wextra Fichier1.c Fichier2.c nom_programme
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
#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>
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