1 points par GN⁺ 2024-09-22 | 2 commentaires | Partager sur WhatsApp
  • J’aime les Makefile. Cela fait plus de 10 ans que je les utilise pour la première fois. Même à l’époque, cela ressemblait à une technologie ancienne. Avec le temps, de nouveaux outils de build sont apparus puis ont disparu, mais les Makefile étaient toujours là. En participant à des projets, je m’y suis habitué, puis à un moment donné j’ai fini par les aimer. Aujourd’hui, c’est le premier outil d’automatisation que j’utilise quand je démarre un nouveau projet.

  • Si j’aime les Makefile, c’est parce qu’ils suivent une convention informelle qui met en place le même ensemble de commandes. Quand je découvre un nouveau projet et qu’il contient un fichier Makefile, j’exécute make ou make build, puis make install, et le projet se construit et se configure. Ou bien cela me donne des informations sur d’éventuelles étapes supplémentaires.

  • J’essaie d’appliquer la même convention dans mes propres projets. Quand j’ouvre un ancien dossier de projet et que j’exécute make dev, cela effectue toutes les étapes nécessaires pour construire le projet et lancer le serveur de développement. Comme j’ai utilisé des technologies variées, chaque technologie avait ses propres commandes. Avec un Makefile, on peut facilement gérer même des projets qu’on n’a pas touchés depuis des mois, voire des années.

  • Les Makefile sont simples. Je n’utilise ni conditions, ni flags, ni autres fonctionnalités complexes. La plupart des tâches se composent d’une ou plusieurs commandes shell. Je pourrais aussi écrire un script bash avec quelques fonctions, mais un Makefile est plus simple et plus rapide à écrire.

  • La plupart de mes projets personnels incluent des tâches courantes comme :

    • dev : démarrer le serveur de développement
    • build : construire le projet (si une étape de build est nécessaire)
    • deploy : déployer/publier le projet
  • Ce blog contient un Makefile simple avec une seule cible :

    dev:  
      npm run dev  
    
  • Dans des projets plus complexes, j’utilise un Makefile comme celui-ci :

    # Lancer le serveur de développement  
    dev:  
      bundle exec jekyll serve --unpublished -w --config _config.yml,_config-dev.yml --livereload  
    
    # Build des ressources  
    build:  
      npm run gulp build  
    
    # Surveiller un dossier spécifique et traiter les ressources  
    watch:  
      npm run gulp watch -- --wip  
    
    # Construire le site web en local, le chiffrer et le déployer sur les serveurs Netlify  
    deploy:  
      JEKYLL_ENV=production bundle exec jekyll build; \  
      make encrypt; \  
      netlify deploy --prod  
    
    # Chiffrer le dossier "_site"  
    encrypt:  
      npx staticrypt _site/*.html -r -d _site  
    
  • Dans l’exemple ci-dessus, j’ignore l’existence des cibles phony. S’il existe un fichier nommé dev, build, watch, deploy ou encrypt, le Makefile pourrait ne pas fonctionner comme prévu.

  • GNU Make est extrêmement répandu. Sous Linux, il est probablement déjà installé. Je ne me souviens pas l’avoir installé explicitement sur mon MacBook non plus. Il a sans doute été installé avec d’autres outils. Make est simple et a moins de dépendances supplémentaires que d’autres outils de build. Cela peut être utile dans des environnements contraints. Il y a de fortes chances que Make soit déjà présent. Sinon, il est toujours possible d’exécuter manuellement les commandes du Makefile dans le shell.

  • Je ne suis pas opposé aux autres outils de build. Quand j’en découvre un nouveau, je trouve cela intéressant. Mais j’utilise toujours Make pour orchestrer différents outils.


Résumé de GN⁺

  • Les Makefile facilitent la gestion grâce à un ensemble cohérent de commandes à travers différents projets.
  • Leur syntaxe simple et leur faible nombre de dépendances les rendent utiles même dans des environnements limités.
  • Ils peuvent être utilisés avec divers outils de build, ce qui leur donne une grande flexibilité.
  • Parmi les outils offrant des fonctions similaires, on trouve CMake, Ninja et Gradle.

2 commentaires

 
kayws426 2024-09-22

Si votre makefile ne définit pas de dépendances, le remplacer par justfile offre une meilleure ergonomie.

 
GN⁺ 2024-09-22
Avis Hacker News
  • Encouragement à utiliser Make

    • Avis invitant à ne pas se décourager même si l’on utilise mal Make
    • La simplicité est l’un des atouts de Make, et sur les petits projets cela ne pose généralement pas de gros problème
    • Dans la plupart des cas, il n’est pas nécessaire de se préoccuper de la « bonne » manière de faire, et on n’ajoute que le niveau de complexité nécessaire
  • Les problèmes des Makefiles

    • Les Makefiles sont moins mauvais que d’autres systèmes de build, mais ils ont malgré tout beaucoup de défauts
    • Principaux problèmes des systèmes de build :
      • Trop basiques : sur les projets complexes, cela devient confus
      • Trop complexes : ils exigent trop de connaissances initiales et trop d’entretien
      • Manque de bibliothèque standard : il faut tout définir soi-même
      • Trop limités : quand les besoins changent, il faut migrer vers un autre système
      • Trop de magie : caractéristique des systèmes mal conçus
      • Syntaxe cryptique ou incohérente
  • Les avantages de Make

    • Point de vue de quelqu’un qui aime Make
    • Make est un ensemble de commandes qui transforment des fichiers via un DSL simple
    • On peut faire la même chose avec Bash ou un autre shell, mais Make est plus simple
  • Utilisation des cibles PHONY

    • N’utilise pas le suivi des dépendances basé sur mtime
    • Il faut définir la cible comme PHONY
    • Récemment, passage à just et aux justfiles pour une utilisation plus simple
  • Débat passionné autour de Make

    • Make suscite des débats comparables à la guerre vi-vs-emacs
    • Utiliser un Makefile comme pilote principal du système de build est une approche intelligente
    • Même en utilisant d’autres outils de build, il est possible de standardiser via un Makefile
  • Les usages variés de Make

    • Make est utilisé pour automatiser des tâches très diverses
    • Utilisation d’un Makefile pour builder et déployer un site web personnel
    • Appel de Make via un Git push et un hook Git
    • Utilisation d’un Makefile pour envoyer et gérer des fichiers PDF
  • Les limites de Make et les alternatives

    • Make est correct comme exécuteur de tâches, mais il existe de meilleures alternatives
    • Make et les Makefiles ne sont pas standardisés
    • Impossible de résoudre les dépendances, nécessité d’un script configure
    • Utilise mtime pour vérifier si les entrées sont à jour, mais cela peut poser des problèmes
    • Conçu selon la philosophie Unix, mais avec des limites pour les systèmes de build modernes
  • Passage aux justfiles

    • Passage aux justfiles pour éviter la complexité des Makefiles
  • Utilisation simple du Makefile

    • Avis favorable à un usage simple du Makefile
    • Il est possible de le partager sans tout apprendre à la perfection
    • Partage d’une expérience où une pipeline GitLab CI a remplacé un Makefile