1 Rapide introduction à la compilation d'un programme « Use the source, Luke! » David Mentré
2 Plan ● Aperçu du processus ● Outils nécessaires ● Les incantations ● Quelques infos sur make,./configure ● Trucs et astuces ● Bonus : compilation de hello ou de ce qui vous intéresse
3 Aperçu du processus (pour le C) ● Un source est compilé en un fichier objet toto.c toto.h → toto.o ● Plusieurs fichiers objets peuvent être liés en une bibliothèque statique (.a) ou dynamique (.so) a.o b.o c.o → bib.a bib.so ● Des fichiers objets et des bibliothèques forment un programme toto.o lib.so → toto
4 Les outils de base ● Chaîne de compilation, c.-à-d. le « compilateur » – compilateur gcc, assembleur as, linker collect – pensez à installer les paquets de développement (-dev) ● Outil de gestion des dépendances : make ● Outil de préparation des sources : configure – configure est fournit avec le source ● Bien évidemment, ça dépend du langage ! Python != C != Java <> OCaml /= Ada /= Eiffel
5 Outils parfois nécessaires ● Dépend beaucoup du projet, du langage,... – lire le README ● Génération de la documentation (Doxygen, LaTeX,...) ● Traduction (gettext,...) ● Scripts (shell, Python, Perl, m4,...)
6 L'incantation habituelle ● Avec quasiment tous les programmes GNU tar zxf toto-1.0.tar.gz && cd toto-1.0./configure : préparation des sources make : compilation (programme, documentation,...) make install : installation dans le système ● Ne le faites pas sans réfléchir ! Ne cassez pas votre système ! Installez dans /usr/local et nul part ailleurs ! J'aime les points d'exclamation !
7 La bonne incantation ● Lire le README, le relire ●./configure --prefix=/usr/local ● make && make install ● Savourez !
8 La bonne incantation (en pratique) ● Lire le README, le relire, le re-relire ●./configure --help ●./configure --prefix=/usr/local ● Installer les bibliothèques manquantes (G-K-syndrom) – voire les compiler ! :-( Reboucler sur le README ● make && make install – corriger les inévitables soucis. Reboucler sur le README ● Savourez (parfois) !
9./configure ● Examine votre système – trouve les fichiers et bibliothèques nécessaires... ou dit qu'il ne les trouve pas ! ● Génère des fichiers avec la bonne configuration – Makefile (utilisé par make), config.h,... ● Des options en ligne de commande permettent de faire des choix – bibliothèque, sous-systèmes, debug ou pas,... – lisez et utilisez l'option --help
10 make ● Lit le fichier Makefile – et tous les autres Makefile inclus ● Établit ce qu'il y a à faire – compilation, liaison, installation ● Le fait, dans le bon ordre !
11 Structure d'un Makefile cible: dépendance1 dépendance2 ⇥ commandes toto.o: toto.c toto.h ⇥ gcc -o toto.o toto.c toto: toto.o ⇥ gcc -o toto toto.o ● Faites attention aux tabulations ! – utilisez un éditeur adapté à la programmation (pas OOo ;-)
12 Quand ça ne marche pas... ● Essayer de comprendre le message d'erreur – souvent, une bibliothèque ou un outil manquant, version de développement d'une bibliothèque (toto-dev) – comprendre ce que font les outils ● Relire le README, INSTALL,... ● Mettre le message d'erreur dans Google – pas toujours très efficace ● Ne pas s'énerver ou maudire le développeur ;-)
13 Un truc : stow ● Sorte de gestion de paquet simplifié – forêt de liens de /usr/local/etc, /usr/local/lib,... ● Installation – ~/toto-src$./configure --prefix=/usr/local/stow/toto- 1.0 – make && make install – cd /usr/local/stow/ && stow toto-1.0 ● Dé-installation – cd /usr/local/stow/ && stow -D toto-1.0
14 Autres trucs ● Ne faites jamais make install en root – utilisez votre compte habituel et donnez-vous les droits sur /usr/local ● Massacrez le Makefile si ça peut vous aider – par exemple : supprimer la génération de la documentation si on veut juste le programme ● Utilisez make -n install – dit ce qu'il compte faire sans le faire
15 Conclusion ● La compilation de programme n'est pas toujours facile – si le paquet est disponible, utilisez le ! ;-) ● Mais indispensable parfois – avoir une version récente ou spécifique, s'amuser, tester, développer, traduire,... – permet de comprendre comment ça marche ● Posez des questions sur (ou
16 Des questions ? ?