De quoi s’agit-il ?
Un makefile est un fichier assez spécial car celui-ci contient un ensemble de commandes shell. Il permet ainsi de centraliser un ensemble d’instructions à exécuter au travers de target (i.e. commande spécifique), faisant ainsi office de raccourcis.
Comment l’utilise-t-on ?
C’est relativement simple. Dans le répertoire contenant le makefile, il vous suffit simplement de taper make, et les commandes du makefile seront exécutées. Un make <target> exécutera une commande spécifique.
Quel est son intérêt ?
Supposons que vous travaillez sur un projet PHP. Celui-ci contiendra certainement des dépendances, back et/ou front, une base de données à installer, etc. Habituellement, vous feriez cet ensemble d’étapes via votre terminal en saisissant une à une chaque commande nécessaire (composer install, npm install, création de la base de données, génération du .env, supprimer les fichiers générés, etc. etc.). Nous pourrions ainsi imaginer une target install dans le makefile afin de centraliser toutes ces commandes d’installation de notre projet. Lancer un make install permettrait alors de tout initialiser sans efforts…
Commençons
Dans votre répertoire de travail préféré, lancez la commande suivante pour créer votre makefile
touch Makefile
Ouvrez le fichier et collez-y les lignes suivantes dans lesquelles trois tâches vont préparer, installer et afficher de l’aide :
Par défaut, si vous lancez juste make dans votre terminal, la tâche exécutée sera help. A vous de modifier cela comme bon vous semble grâce à cette ligne :
.DEFAULT_GOAL := prepare
Sinon, le makefile exécute toujours la première tâche trouvée.
Essayons maintenant de tirer profit de la pleine puissance du makefile. Comme je vous l’ai déjà dit, nous allons créer une tâche install pour qu’elle puisse contenir un ensemble de commandes :
install: clean download execute
clean > pour supprimer le contenu d’un fichier texte
download > pour télécharger un script afin de connaître les informations de sa machine (IP, etc.)
execute > pour exécuter le script téléchargé
Le makefile ressemble maintenant à ceci :
Mon répertoire contient à cette étape les fichiers suivants :
Lançons maintenant le make :
Comme vous pouvez le voir, les trois tâches [clean, download, execute] ont bien été exécutées dans l’ordre. Le fichier que nous avons téléchargé est également bien présent et le contenu du fichier souhaité est bel et bien supprimé
Bonus : générer automatiquement la description des commandes dans la tâche help
Ceci est possible en commentant chaque target par ##. Comme le makefile suivant vous le suggère :
Et voilà la sortie :
Conclusion
En utilisant un makefile, vous gagnerez du temps, notamment lors de la phase de développement d’un projet. En effet, imaginez qu’un collègue doit venir vous aider sur l'un de vos projets mais qu’il ignore tout de son installation. Préparez-lui alors un makefile, créez une target install et faites appel à d’autres targets en séparant la logique et qui permettront d’installer convenablement votre projet. En récupérant les sources de votre projet, votre collègue devra alors seulement exécuter la commande make à la racine de votre projet pour tout initialiser. Pratique non ?