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: 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:

1
2
3
4
5
6
7
8
#include <stdio.h>

int main(void)
{
    puts("Encore un programme tout simple!");

    return 0;
}

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:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
#include <stdio.h>
#include <math.h>

int main(void)
{
    double pi;

    pi = 4.0 * atan(1.0);
    printf("pi: %f\n", pi);

    return (0);
}

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:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
all: simple lesssimple

simple: simple.c
	gcc simple.c -o simple

lesssimple: lesssimple.c
	gcc lesssimple.c -o lesssimple -lm

.PHONY: clean

clean:
	rm -f simple

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.