Linux Makefile - Quand utiliser un makefile
Arrêtez de mémoriser des commandes Docker complexes. Découvrez quand et comment utiliser un makefile Linux avec GNU make pour automatiser la mise en place de votre projet, les logs et la gestion de l'environnement.
Traduction automatique
Cet article a plus d'un an, mais il a été relu le 30 juillet 2026 — son contenu est toujours exact.

Cet article plaide pour l'usage d'un makefile de projet (Linux/WSL uniquement) comme endroit unique pour centraliser les commandes difficiles à retenir — transformant par exemple docker compose up --detach en make up — et montre un fichier de départ basique avec des targets pour les actions Docker courantes, plus une astuce sur l'utilisation de printf pour afficher des infos utiles (comme les identifiants) quand une target s'exécute.
Écrire votre propre makefile a l'énorme avantage, terriblement puissant, de pouvoir centraliser en un seul endroit les commandes que vous utilisez sur votre projet, quelle que soit la nature de celui-ci (php, javascript, nodeJs, Markdown, etc.).
La présence d'un fichier nommé makefile envoie un message clair à quiconque vient travailler sur le projet : Hé, regarde ici, tu y trouveras toutes les commandes dont tu as besoin.
Vous pouvez donc définir une commande up (c'est vous qui choisissez le nom) qui lancera toutes les actions nécessaires au démarrage du projet ; vous pourriez avoir down pour l'inverse, check pour vérifier que le projet est valide (par exemple lancer des contrôles statiques de la qualité de votre code, comme dans Python - Les outils de qualité de code), et ainsi de suite.
Un mot au lieu de cette commande
Voici un appel make phpmyadmin et, juste en dessous, la commande Docker qu'il remplace :
Un mot à gauche. Cent vingt caractères de --link, --network et -p à droite — le genre de ligne que personne ne tape de mémoire et que tout le monde finit par chercher dans son historique de shell.
Et remarquez la deuxième ligne de la sortie : les identifiants et l'URL sont affichés aussi, comme ça vous n'avez pas à les chercher non plus.
Ce que contient le makefile
Tout ce comportement vient d'un simple fichier texte à la racine du projet :
adminer: @printf "\e[1;033m%s\e[0m\n\n" "User is root and password is example. Please open http://127.0.0.1:8088?server=joomladb&username=root&db=joomla_db to open Adminer." @printf "\e[1;033m%s\e[0m\n\n" "Starting adminer. If the browser didn't open automatically, please surf to http://127.0.0.1:8088?server=joomladb&username=root&db=joomla_db to open adminer." docker run -d --rm --name adminer --link joomladb:db --network kingsbridge_default -p 8088:8080 adminer -sensible-browser http://localhost:8088 &
bash: @printf "\e[1;033m%s\e[0m\n\n" "Start an interactive shell in the Joomla Docker container; type exit to quit" docker compose exec joomla /bin/sh
code: code .
down: docker compose down
explorer: explorer.exe .
kill: docker compose kill
logs: docker compose logs --follow
start: @printf "\e[1;033m%s\e[0m\n\n" "Starting your website. If the browser didn't open automatically, please surf to http://127.0.0.1:8080 to open your site." -sensible-browser http://localhost:8080 &
up: docker compose up --detach
phpmyadmin: @printf "\e[1;033m%s\e[0m\n\n" "User is root and password is example. Please open http://127.0.0.1:8089 to open phpmyadmin." @printf "\e[1;033m%s\e[0m\n\n" "Starting phpmyadmin. If the browser didn't open automatically, please surf to http://127.0.0.1:8089 to open phpmyadmin." docker run --name phpmyadmin -d --link joomladb:db --network kingsbridge_default -p 8089:80 phpmyadmin -sensible-browser http://localhost:8089 &Ce fichier Makefile définit des cibles pour gérer une infrastructure Docker Joomla. Il propose des commandes pour démarrer/arrêter les conteneurs, ouvrir des outils d'administration comme Adminer et phpMyAdmin, afficher les logs, et accéder à un shell interactif dans le conteneur Joomla.
Les lignes comme adminer: ou bash: s'appellent des targets ; ce sont vos commandes. Regardez la target up: : vous y trouverez une seule commande, docker compose up --detach. Donc au lieu de retenir docker compose up --detach pour lancer votre application, vous exécutez simplement make up. Pour ouvrir le navigateur et parcourir votre site, ce sera make start.
Les identifiants montrés plus haut sont affichés par un appel printf dans cette target — une bonne habitude pour tout ce que vous devriez sinon aller rechercher.
Danger
L'indentation dans un makefile DOIT se faire avec des tabulations et pas des espaces, c'est crucial. Alors assurez-vous de ce point : si votre fichier ne fonctionne pas, vous savez quoi faire.
Ce fichier est spécifique à chaque projet, pas global.
Le makefile, créé dans le répertoire de votre projet, peut contenir des instructions pour ce projet précis. Vous pouvez avoir un makefile par projet.
Pourquoi s'embêter
Dans l'article Créez votre site Joomla avec Docker, nous avons vu beaucoup de commandes Docker.
Par ordre alphabétique :
docker compose down,docker compose exec joomla /bin/sh,docker compose kill,docker compose logs --follow,docker compose up --detach,docker container list,docker image list,docker network list,- et bien d'autres
Ce n'est certainement pas facile de toutes les retenir — et il est beaucoup plus simple de se souvenir d'une commande du type make quelquechose (et ça peut être n'importe quoi, pas seulement du Docker).
`make` n'est pas encore installé ?
Nous utilisons GNU make pour cela.
Lancez d'abord which make dans votre console Linux pour vérifier si make est installé. Si c'est le cas, vous obtiendrez par exemple /usr/bin/make comme résultat. Si vous obtenez make not found, exécutez sudo apt-get update && sudo apt-get -y install make pour l'installer.
Le makefile lui-même est du texte pur, vous pouvez donc utiliser l'éditeur que vous voulez. De mon côté, j'ai maintenant mes habitudes avec Visual Studio Code. Assurez-vous que l'indentation utilise des tabulations, pas des espaces.
Uniquement pour Linux / WSL (pas pour DOS/PowerShell)
Ce chapitre concerne uniquement Linux puisque DOS/PowerShell ne supporte pas la commande GNU make.
Conclusion
Un makefile à la racine d'un projet est un message pour la prochaine personne qui l'ouvrira — vous compris, dans six mois : tout ce dont tu as besoin pour faire tourner ce truc est ici. Les commandes cessent de vivre dans votre historique de shell et commencent à vivre dans le repository, versionnées à côté du code sur lequel elles agissent.
L'étape suivante évidente est de rendre cette liste auto-documentée : Linux Makefile - Ajouter un écran d'aide montre comment un simple make peut afficher chaque target disponible avec sa description. Et une fois convaincu, Makefile - Tutoriel et astuces rassemble tout ce que j'ai appris depuis l'écriture de mon premier.


