UT Université de TOURS - Faculté des Sciences et Techniques
Antenne Universitaire de BLOIS
université i i tT ‘i
une Licence Sciences et Technologies, Mention Informatique
Module 1 -Informatique — Algorithmique et Programmation Objet
Travaux Pratiques (2), Licence 1ére Année
Mon Premier Programme C
Exercice 1 Exemples de compilations
On considare que Von a un code source écrit dans le fichier ex1.c.
Expliquer ce qui se passe dans les situations suivantes :
1. je fais gee ex1.c que se passe-t'il quand j'exécute ex1 ?
2. je fais gee ex1.c que se passe-t'il quand j’exécute . /ex1 ?
3. je fais gee ex1.c que se passe-t’il quand j’exécute a.out ?
4, je fais gee ex1.c que se passe-tiil quand j'exécute ./a.out ?
Exercice 2 Compilation et Construction d’un Makefile simple
Vous allez procéder a l'écriture de votre premier programme en langage C, a sa
compilation et son exécution.
Commencez par écrire le programme en vous servant d’un éditeur (gedit, par
exemple). Donnez-lui le nom hello.e et recopiez-y le texte suivant
Finclude
int main(){
Printf(*Hello workd 1");
return 0;
Pour le compiler, tapez gee -Wall hello.c : ceci (gee) compile le programme
hello.c et génére (si pas d'erreurs) un exécutable appelé par défaut a.out.
Pour exécuter votre programme (exécutable), tapez ./a.out. -Wall indique au
compilateur qu'il affiche tous les warnings-avertissements.
Si vous souhaitez donner un autre nom a U'exécutable, vous pouvez le mentionner
ala suite de Voption -o : gcc -Wall hello.c -o progl, générera un exécutable
de nom prog1 dont Vexécution se fait en tapant . /progl.
Un projet est souvent constitué de plusieurs programmes sources C. Pour
illustrer, décomposons notre programme hello.c en 2 programmes comme suit :
7* Programe hello.c *7 7* Programme atfiche.c *7
void affiche(char *); #include
int main(){
affiche("Hello world !* void affiche(char *texte){
return 0; printf ("%s\n", texte);
y y
Pour compiler (ce "projet"), il faut taper gee -Wall hello.c affiche.c -o
progl et on obtient Uexécutable progl qu’on peut exécuter comme
précédemment et obtenir le méme résultat.
Travaux Dirigés (8) - Classes et Objets Page 1/5OT iiss |
Module 1 ~ Informatique - Algorithmique et Programmation Objet
Ici, il s’agit dun "projet" constitué que de 2 programmes sources. Sil en
comportait plusieurs dizaines, cela deviendrait fastidieux, d’autant que la mise A
jour (correction, par exemple) d’un seul programme nécessiterait la compilation
de tous les autres.
On peut limiter cela si l'on ne procéde a la compilation de chacun des sources
pour produire les fichiers objets et procéder a U'édition de lien a la fin. Par
exemple :
1. gce -Wall -c hello.c // génere un fichier objet hello.o
2. gee -Wall -c affiche.c // génere un fichier objet affiche.o
3. gcc -Wall hello.o affiche.o -o progl _// édition de liens
Testez, vous obtiendrez toujours un exécutable progl qui donnera le méme
résultat. Dans le cas oti un seul programme source est modifié, il est inutile de
compiler les autres. Si hello.c est modifié, il faudra exécuter a nouveau
uniquement les commandes 1. et 3. précédentes, mais ga reste fastidieux.
i existe un outil, make, qui facilite 'automatiser de la compilation d’un projet.
Nous ne verrons pas en détail ses possibilités mais juste quelques aspects qui
vous feront gagner du temps.
Pour le projet précédent, il nous a fallu exécuter les commandes de 1. a 3. Pour
produire notre exécutable progi. Suite a la modification de hello.e, il a fallu
exécuter & nouveau les commandes 1. et 3.. Le réle de make est de reproduire
ces séquences de commandes lors d’événements en fonction des relations entre
les fichiers.
Dans notre exemple, hello.c produit hello.o, affiche.c produit affiche.o et
hello.o et affiche.o produisent progl. Ces relations, il suffit de les fournir &
make en les décrivant dans un fichier texte Makefile.
Une relation s’écrit sous la forme :
produit : source
commande
elle indique que produit est construit a partir de source et que c'est commande
qui permet de le réaliser.
Nos 3 commandes précédentes peuvent étre décrites par les relations suivantes :
progl : hello.o affiche.o
gcc -Wall hello.o affiche.o -o prog]
hello.o : hello.c
gece -Wall -c hello.c
affiche.o : affiche.c
gcc -Wall -c affiche.c
Vous remarquerez que la régle correspondant a la commande 3. est mise en 1",
car c'est la position de la plus prioritaire, et elle correspond a la construction de
notre projet.
Travaux Dirigés (8) - Classes et Objets Page 2/5