====== Création d'un binaire à partir des fichiers sources ======
===== Prérequis pour la compilation des sources =====
Pour compiler les sources d'une application, il vous faut les paquets Debian suivants:
* gcc # apt-get install gcc
* wget # apt-get install wget
===== Compilation d'une application binaire à partir des sources =====
Le but est de construire un fichier binaire exécutable (ou plusieurs suivant les applications) à partir des fichiers sources d'une application.
L'exemple qui sera utilisé se trouve sur le site gnu.org. Il s'agit du fameux exemple ''Hello World'':
$ wget http://ftp.gnu.org/gnu/hello/hello-2.9.tar.gz
Pour en savoir plus sur cette application, vous pouvez consulter les liens suivants:
* [[http://www.gnu.org/software/hello/|Hello - GNU Project]] et
* [[http://www.gnu.org/software/hello/manual/hello.html|son manuel]].
Dans un premier temps, il faut extraire les fichiers de l'archive:
$ tar xf hello-2.9.tar.gz
Un répertoire ''hello-2.9'' a été créé, rendez-vous dans ce répertoire:
$ cd hello-2.9
Vous pouvez examiner les fichiers du répertoire, et vous rendre compte qu'il s'agit d'un parfait exemple d'application GNU qui respecte:
* [[http://www.gnu.org/prep/standards/|les règles de codage d'application GNU]] et
* [[http://www.gnu.org/prep/maintain/|les informations pour la maintenance]].
Cette application utilise les [[http://fr.wikipedia.org/wiki/Autotools|''autotools'']] pour analyser l'environnement et permettre de créer le fichier binaire exécutable pour différents plates-formes unix (portabilité).
Le processus de compilation est décrit dans le schéma suivant:
[[http://commons.wikimedia.org/wiki/File:Autoconf-automake-process-fr.svg|autotools]].
Le processus est généralement le même pour toutes les applications construites autour de ces outils. Mais néanmoins, dans le doute, vous pouvez consulter dans l'archive de l'application source, les fichiers suivants qui précisent ou rappellent souvent la démarche de compilation et d'installation de l'application:
* README
* INSTALL
Pour commencer, analyse de l'environnement:
$ sh configure # ou ./configure (le fichier est exécutable)
S'il n'y a pas d'erreurs, c'est que la configuration minimum obligatoire pour l'application a été trouvée. Cependant suivant l'application, des fonctionnalités sont souvent disponibles en option, suivant vos besoins, il faudra préciser à ''configure'' ces options. Il existe plusieurs types d'options, dont les options:
* d'installation, dans quels répertoires vont se trouver les fichiers sur le système, lors de la phase d'installation, option ''--prefix'',
* de compilation, lors de la compilation, des modules de l'application peuvent être activés (i.e compilés et intégrés à l'exécutable final) ou désactivés, options: --disable- et --enable-.
Pour voir certaines de ces options:
$ ./configure -h # ou --help
Après la configuration, de nombreux fichiers ont été créés dont le fichier [[http://fr.wikipedia.org/wiki/Makefile|''Makefile'']] qui est la base, entres autres, pour compiler les sources et obtenir un exécutable.
Pour procéder à la compilation et à la création des artefacts de l'application:
$ make
Par défaut, le **make** cherche dans le fichier ''Makefile'', la première cible, et par convention, souvent représentée par ''all:'', c'est à partir de là que tout s'enchaîne.
Pour en apprendre plus sur [[http://fr.wikipedia.org/wiki/GNU_make|Make]], vous pouvez consulter le [[http://www.gnu.org/software/make/manual/make.html|manuel]], ou utiliser le ''man'' ou l'aide en ligne:
$ make -h
Ce qui nous donne quelques options intéressantes:
* **-f** pour fournir un autre fichier ''Makefile'' que celui qu'il va chercher par défaut avec le nom sus-cité,
* **-j** pour faciliter la compilation en mode tâches simultanées,
* **-n** afficher toutes les commandes de ce processus de compilation sans les exécuter (mode simulation).
Pour fournir et installer le binaires et les fichiers associés au bon fonctionnement de l'application, il suffit de changer de cible pour make en tant qu'administrateur:
# make install # ou $ sudo make install
Une fois installée, vous pouvez apprécier l'application, en lançant le binaire:
$ hello
L'application est livrée avec des options, pour en savoir plus:
$ hello -h
Comme l'exemple hello est bien fait, il est aussi possible de désinstaller l'exécutable et les fichiers associés du système:
# make uninstall # ou $ sudo make uninstall
Il est bien entendu, que ceci se fait à partir du répertoire où se trouvent les sources de l'application.
Par contre le binaire est toujours disponible dans l'arborescence des sources, il
est situé dans le répertoire ''src'':
$ cd src
$ ./hello
Pour enlever ce fichier de l'arborescence des sources et tous les fichiers produits pendant le processus de compilation, il suffit d'appeler ''make'' avec la cible ''clean'':
$ make clean
Pour nettoyer en profondeur, c'est à dire enlever les fichiers de la configuration, il faut appeler une autre cible (non pas celle [[http://fr.wikipedia.org/wiki/Monsieur_Propre|là]]):
$ make distclean
et du coup, il faut refaire la configuration et la compilation depuis le début, si on veut avoir le binaire.
===== Compilation: alternative =====
Il existe d'autres façons de configurer l'environnement avant de lancer le processus de compilation, on peut le faire:
* à la main ou avec les pieds.
* utiliser un système alternatif.
Parmi les systèmes alternatifs, il existe [[http://fr.wikipedia.org/wiki/Cmake|CMake]]. Il est prévu pour être multi-environnement (Unix, mais aussi les autres, pour ne pas les citer (__Et il les a cité...__)).
Pour illustrer CMake, nous allons télécharger les sources de MySQL:
$ wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.15.tar.gz
MySQL utilise CMake. Et justement pour utiliser CMake, il faut installer les paquets Debian suivants:
$ sudo apt-get install cmake
Installer l'archive:
$ tar xf mysql-5.6.15.tar.gz
$ cd mysql-5.6.15
Explorez l'arborescence des sources, notez l'absence de ''configure''.
Démarrer la configuration:
$ cmake .
S'il n'y a pas d'erreur, on peut voir apparaître dans le répertoire le fichier ''Makefile'' qui servira ensuite pour la compilation que je vous laisse en exercice, car il est identique à ce qui a été vu au-dessus.
Avec CMake, il est possible de voir toutes les options disponibles lors de la configuration de l'application:
$ cmake . -L # ou cmake . -LH ou cmake . -LAH
Enfin il existe aussi une version en interface utilisateur en mode texte:
$ sudo apt-get install cmake-curses-gui
$ ccmake .
Voici le résultat dans la capture d'écran ci-dessous:
{{ :projets:systemesreseaux:compilesource_ccmake.png?200 |}}