Skip to content

Makefile, Compilation séparée et bibliothèque graphics.h

Le but de la séance est de se familiariser avec la compilation séparée, l'utilisation de la commande make et du fichier Makfile, et de découvrir une bibliothèque permettant de dessiner dans une fenetre graphique.

Compilation séparée

Lire les slides 6 à 18 de ce document. Recopiez les exemples et testez la compilation séparée.

Lire ce tutoriel au moins jusqu'à l'étape 7 incluse et écrivez un makefile permettant de compiler l'exemple des slide 12-13 du premier document avec la commande make. Lire veut dire lire et comprendre et testez les exemples fournis.

La bibliothèque graphique MLV

Pour notre mini projet, nous allons avoir besoin d'afficher des éléments dans une fenetre graphique. Pour cela nous allons utiliser une bibliothèque assez simple basée sur une bibliothèque plus complexe appellée SDL (Simple Direct Media Layer).

Cette bibliothèque a été écrite par Adrien Boussicault (Labri) et Marc Zipstein (UGE UPE-MLV). Elle est censé fonctionner sous tous les OS qui supportent SDL, mais nous ne pouvons vous garantir son fonctionnement que sous les distributions Linux standard à l'heure actuelle.

Récupérer et installer la bibliothèque

  • En principe, sur les machines de l'école, la librairie est installée

  • Si vous n'avez pas de système debian/ubuntu a disposition, utilisez une distribution live Ubuntu LTS 20.04 bootée depuis une clef USB (ou une machine virtuelle sous virtualbox). Pour télécharger l'OS et configurer votre clef USB, référez vous au site officiel.

  • Procédure testée et validée sur une VM avec la dernière ubuntu LTS "installation minimale" :

    • sudo apt-get install aptitude
    • sudo aptitude update
    • sudo aptitude full-upgrade
    • sudo aptitude install build-essential
    • sudo aptitude install libmlv3-dev
  • Téléchargez également l'archive contenant le code source de la bibliothèque et décompressez la dans votre répertoire de travail.

  • Décompressez l'archive avec la commande tar xzf mlv-2.0.2.tar.gz. Placez vous dans le répertoire mlv-2.0.2/examples/beginner/
  • Essayez un gcc 01_hello_world.c. Ça fonctionne ? Quelle erreur obtenez vous ?
  • Essayez gcc -c 01_hello_world.c. Normalement vous devriez obtenir un fichier 01_hello_world.o. C'est donc l'édition des liens et non la compilation qui pose problème.
  • Essayez gcc 01_hello_world.o -lMLV. Ceci devrait fonctionner et vous devriez obtenir un fichier exécutable a.out. Testez ce dernier, cela devrait afficher une fenêtre graphique avec le texte hello world. Attention l'option a ajouter est bien -lMLV et pas -IMLV. De plus cette option doit bien se trouver à la fin de la ligne de commande.

Pour la suite des exercices qui utiliseront cette bibliothèque, vous utiliserez évidemment un fichier Makefile permettant de faire tout ça simplement en utilisant la commande make.

Les options de compilations seront comme toujours -Wall -pedantic -ansi, et vous rajouterez pour l'édition des liens l'option -lMLV

Découverte

Regardez et tester les exemples du répertoire beginner (et medium et advanced si vous le souhaitez). En vous inspirant du fichier 02_shapes.c, faites un programme qui affiche une maison (un carré rouge pour le mur principale, un triangle bleu pour le toit, des rectangles de couleur pour les fenêtres, un rond jaune pour faire un soleil.. soyez créatifs.

Pour la suite du projet nous aurons essentiellement besoin de la fonction qui dessine un rectangle, de celle qui récupère une touche tapée au clavier et de celle qui rafraichit l'affichage. Identifiez bien ces trois fonctions.

L'ensemble des fonctions de la bibliothèque et leur documentation est accessible à cette adresse.

Rendu

N'oubliez pas de pousser votre travail sur gitlab (sous repertoire tp1) !

Dans un répertoire nommé login_tp1 copiez vos .c, makefile et .h. Vous pouvez y ajouter un fichier texte README si vous avez des choses à expliquer à joindre à votre rendu. Depuis le répertoire parent, tapez la commande tar czf login_tp1.tgz login_tp1. Déposez sur blackboard le fichier obtenu.