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 commandemake
- 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éerfichier.pdf
- Pour
fichier.pdf
, il a besoin defichier.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