La commande make ################ **make** est un utilitaire **gnu** permettant d'automatiser la compilation. Cet outil offre deux avantages évidents: * créer un script permettant de recompiler votre code dans le bon ordre. * éviter d'avoir à retaper toutes les commandes de compilation à chaque modification du code. Au delà, **make** ne va compiler que les fichiers qui ont été modifiés. Ainsi, il permet aussi de gagner du temps à la compilation. La commande **make** offre de nombreuses automatisation. Mais, pour commencer, cette commande est déjà très intéressante si on en fait une utilisation très basique. De plus, bien qu'elle soit pratiquement indispensable à la construction de programme C, cette commande permet de travailler avec pratiquement tous les langages. Exemple simple ============== Maintenant, nous allons voir comment compiler de simples programmes. Pour plus d'information sur le sujet voir: :ref:`Compiler_avec_gcc`. Imaginons que nous disposions d'un programme C aussi simple qu'il soit, il est toujours intéressant de créer son *Makefile* pour le rendre plus simple à programmer. Aussi, imaginons que deux ou trois ans plus tard, on souhaite recompiler ce programme. Avec la commande **make**, il sera facile de recompiler. Sans *Makefile*, il faudra alors se souvenir des commandes de compilation... Relire la doc, le code etc... Voici un premier programme, la compilation est simple, mais toutefois, elle permet de voir comment compiler un petit programme simple: .. literalinclude:: ./sources/make/simple.c :language: c :linenos: Ci-dessous, un programme tout aussi simple, mais pour lequel il est nécessaire de préciser que la librairie mathématique doit être liée: .. literalinclude:: ./sources/make/lesssimple.c :language: c :linenos: Pour compiler ce dernier programme il est nécessaire de spécifier à **gcc** d'utiliser la librairie *math*. Et, bien que cela puisse paraître trivial, cela peut faire gagner beaucoup de temps à une personne cherchant à le compiler. Voici un exemple de fichier *Makefile* très simple avec lequel commencer: .. literalinclude:: ./sources/make/Makefile :language: make :linenos: Ce fichier permet de construire les deux exemples précédents. Bien entendu, il est possible d'écrire des fichiers bien plus complexes et obscurs. Mais, ici, l'objectif est de rester clair. Donc, une première habitude à prendre: aussi simple un programme puisse être, aussi trivial que sa compilation vous paraisse, il est important de fournir un fichier comme *Makefile* permettant de s'assurer que tout utilisateur saura le compiler. Le web est truffés d'exemples inutiles, car il est impossible de les compiler, faute d'instructions élémentaires. Les auteurs de ce type de code semblent vouloir réserver leur trouvaille (bien souvent recopié depuis un autre site) à une élite qui n'en a pas besoin, puisqu'il faut avoir des connaissances supérieures à celles de l'auteur. Bref, volontairement ou involontairement incomplets, les codes sources qui ne sont pas accompagnés des commandes ayant permis de les construires sont inutiles. Pour offrir de meilleurs code sources, une commande de build me semble être la moindre des choses.