Archives / Snippets / Projets

make -B pour forcer la construction (Build) d'une cible

Utilisation de make

  • Plusieurs versions de make. Moi c'est GNU Make 4.0
  • On crée un fichier appelé Makefile par projet, et on exécute la commande make
  • Pour tester sans vraiment exécuter pour voir ce que ça fait : make -n
  • Pour détailler un peu : make --debug
  • La plupart du temps quand ça marche pas, c'est pas à cause de make, c'est les commandes elle-mêmes...
  • Faire des commentaires sur des lignes entières, pas en bout de ligne car ça fait n'importe quoi...

Dans un Makefile

  • Un fichier Makefile est composé de définitions de constantes (un peu particulières), et de règles
  • La règle par défaut est la première. Souvent appelée all.
# Ceci est un commentaire (pas en fin de ligne, hein)

all: fichier.pdf

%.pdf: %.tex
    pandoc '$<' -o '$@'
  • Quand on appelle make, il va essayer d'appliquer la première règle (all) : pour cela il doit créer fichier.pdf
  • Pour fichier.pdf, il a besoin de fichier.tex, et il va appliquer
  • Si fichier.tex n'existe pas, make va se plaindre : aucune règle applicable

Règles particulières

Phony

  • Le principe de make c'est quand même de générer des nouveaux fichiers que quand la source a été modifiée.
  • Pour exécuter les mêmes instructions à chaque fois même quand rien n'a changé, on utilise .PHONY
.PHONY:
  • Si make doit créer des fichiers intermédiaires pour arriver au but final, il les supprime comme un grand tout seul à la fin.
  • Des fois, on aimerait qu'il ne les supprime pas pour regarder ce qui s'est passé au niveau de ces fichiers intermédiaires :
.SECONDARY:

rm

Quand on supprime un fichier avec rm, ça crée une erreur si le fichier n'existe pas. Solutions :

    - rm file       # le '-' au début dit à make d'ignorer l'erreur
    rm file || true # en cas d'erreur, on exécute true, qui ne génère pas d'erreur...
    rm -f file      # avec -f, pas d'erreur