5.5 De la commande make et des fichiers Makefile
La plupart des plates-formes sur lesquelles tourne LilyPond disposent
d’un logiciel appelé make. Ce logiciel va lire un fichier
spécial, nommé Makefile, qui contient tout ce qu’il
faut – les dépendances entre certains fichiers, les instructions
successives à traiter par le système – pour aboutir au fichier que
vous désirez obtenir. Il pourrait par exemple contenir tout ce qu’il
faut pour produire ‘ballade.pdf’ et ‘ballade.midi’ à partir de
‘ballade.ly’ en lançant LilyPond.
La création d’un Makefile peut se révéler pertinente pour
certains projets, que ce soit par simple goût personnel ou bien par
respect de ceux qui pourront accéder à vos sources. Cette manière de
procéder est particulièrement indiquée lorsque vous travaillez sur un
projet de grande envergure impliquant de nombreuses inclusions de
fichiers et différentes éditions – par exemple un conducteur et un
matériel d’orchestre complet avec la partition pour le chef et une
partition séparée pour chacun des pupitres – ou bien si votre projet
requiert certaines commandes particulières comme lilypond-book.
Les Makefiles varient tant en complexité qu’en flexibilité selon
les besoin et les aptitudes de celui qui les crée. Le programme GNU
Make est installé par défaut sur les distributions GNU/Linux et sur
MacOS X, et il en existe une version pour les environnements Windows.
Consultez le GNU Make Manual pour plus de détails sur ce dont
make est capable – vous pourrez même en trouver des versions
françaises à l’aide des moteurs de recherche –, dans la mesure où ce
qui suit ne donne qu’un bref aperçu de ses possibilités.
Les commandes permettant de définir les règles diffèrent selon la
plate-forme : si les différents GNU/Linux et MacOS X utilisent
bash, Windows utilise cmd. Dans le cas de MacOS X,
vous devrez toutefois configurer votre système de telle sorte qu’il
utilise l’interpréteur en ligne de commande. Voici quelques exemples de
fichier Makefile, avec une version pour GNU/Linux ou MacOS et une
pour Windows.
Pour commencer, une pièce à quatre mouvements pour orchestre et dont les fichiers sont répartis selon l’arborescence suivante :
Symphonie/ |-- MIDI/ |-- Makefile |-- Notes/ | |-- alto.ily | |-- cor.ily | |-- cello.ily | |-- figures.ily | |-- hautbois.ily | |-- trioCordes.ily | |-- violonUn.ily | `-- violonDeux.ily |-- Partitions/ | |-- symphonie.ly | |-- symphonieI.ly | |-- symphonieII.ly | |-- symphonieIII.ly | `-- symphonieIV.ly |-- PDF/ |-- Pupitres/ | |-- symphonie-alto.ly | |-- symphonie-cello.ly | |-- symphonie-cor.ly | |-- symphonie-hautbois.ly | |-- symphonie-violonUn.ly | `-- symphonie-violonDeux.ly `-- symphonieDefs.ily
Les fichiers ‘.ly’ des répertoires Partitions et
Pupitres récupéreront la notation des fichiers ‘.ily’
contenus dans le répertoire Notes :
%%% début du fichier "symphonie-cello.ly" \include "../symphonieDefs.ily" \include "../Notes/cello.ily"
Le Makefile répertorie des cibles correspondant à score
(l’intégrale au format conducteur), mouvements (chacun des
mouvements au format conducteur) et pupitres (une partition par
pupitre). Il contient aussi une cible archive chargée de générer
une archive des fichiers source qui pourra être diffusée sur la toile ou
transmise par courriel. Voici ce que contiendrait ce Makefile
pour GNU/Linux ou MacOS X. Ce fichier doit être enregistré sous le nom
de Makefile à la racine du projet – ici Symphonie.
Note : Lorsque vous définissez une cible ou une règle sur plusieurs lignes, les lignes à partir de la deuxième doivent débuter par une tabulation, non pas par des espaces.
# Le préfixe au nom des fichiers résultants
piece := symphonie
# La commande d'appel à lilypond
LILY_CMD := lilypond -ddelete-intermediate-files \
-dno-point-and-click
# Les suffixes utilisés dans ce Makefile
.SUFFIXES: .ly .ily .pdf .midi
.DEFAULT_GOAL := score
PDFDIR := PDF
MIDIDIR := MIDI
# Les fichiers sources et résultants sont recherchés dans les
# répertoires listés dans la variable VPATH. Ceux-ci sont tous
# des sous-répertoires du répertoire courant (fourni par la variable
# de GNU make `CURDIR').
VPATH := \
$(CURDIR)/Partitions \
$(CURDIR)/Pupitres \
$(CURDIR)/Notes \
$(CURDIR)/$(PDFDIR) \
$(CURDIR)/$(MIDIDIR)
# La règle type pour créer un PDF et un MIDI à partir d'un fichier
# source LY.
# Les .pdf résultants iront dans le sous-répertoire "PDF" et les
# fichiers .midi dans le sous-répertoire "MIDI".
%.pdf %.midi: %.ly | $(PDFDIR) $(MIDIDIR)
$(LILY_CMD) $<; \ # tabulation au début de la ligne
mv "$*.pdf" $(PDFDIR)/ # tabulation au début
mv "$*.midi" $(MIDIDIR)/ # tabulation au début
$(PDFDIR):
mkdir $(PDFDIR)
$(MIDIDIR):
mkdir $(MIDIDIR)
commun := symphonieDefs.ily
notes := \
alto.ily \
cello.ily \
cor.ily \
hautbois.ily \
violonUn.ily \
violonDeux.ily
# Les dépendances selon le mouvement.
$(piece)I.pdf: $(piece)I.ly $(notes) $(commun)
$(piece)II.pdf: $(piece)II.ly $(notes) $(commun)
$(piece)III.pdf: $(piece)III.ly $(notes) $(commun)
$(piece)IV.pdf: $(piece)IV.ly $(notes) $(commun)
# Les dépendances pour la partition intégrale.
$(piece).pdf: $(piece).ly $(notes) $(commun)
# Les dépendances pour les pupitres.
$(piece)-alto.pdf: $(piece)-alto.ly alto.ily $(commun)
$(piece)-cello.pdf: $(piece)-cello.ly cello.ily $(commun)
$(piece)-cor.pdf: $(piece)-cor.ly cor.ily $(commun)
$(piece)-hautbois.pdf: $(piece)-hautbois.ly hautbois.ily $(commun)
$(piece)-violonUn.pdf: $(piece)-violonUn.ly violonUn.ily $(commun)
$(piece)-violonDeux.pdf: $(piece)-violonDeux.ly violonDeux.ily $(commun)
# Lancer `make score' pour générer l'intégrale des quatre mouvements
# en un seul fichier.
.PHONY: score
score: $(piece).pdf
# Lancer `make parties' pour obtenir tous les pupitres.
# Lancer `make symphonie-toto.pdf' pour obtenir la partie
# instrumentale de toto.
# Par exemple : `make symphonie-cello.pdf'.
.PHONY: parties
parties: $(piece)-cello.pdf \
$(piece)-violonUn.pdf \
$(piece)-violonDeux.pdf \
$(piece)-alto.pdf \
$(piece)-hautbois.pdf \
$(piece)-cor.pdf
# Lancer `make mouvements' pour générer un fichier séparé pour chacun
# des mouvements.
.PHONY: mouvements
mouvements: $(piece)I.pdf \
$(piece)II.pdf \
$(piece)III.pdf \
$(piece)IV.pdf
all: score parties mouvements
Les choses se compliquent sous Windows. Une fois GNU Make pour Windows
téléchargé et installé, il vous faudra correctement définir le chemin
d’accès au programme Make – dans les variables d’environnement
du système – afin que l’interpréteur de commandes DOS puisse le
localiser. Pour cela, faites un clic droite sur « Poste de travail »,
choisissez Propriétés puis Avancées. Cliquez sur
Variables d'environnement puis, dans l’onglet
Variables système, mettez path en surbrillance et
cliquez sur Modifier. Ajoutez alors le chemin d’accès complet à
l’exécutable de GNU Make, qui devrait ressembler à :
C:\Program Files\GnuWin32\bin
Il va également falloir adapter le makefile aux particularités de l’interpréteur de commandes et à la présence d’espaces dans le nom de certains répertoire de ce système. Enfin, les fichiers MIDI ont une extension par défaut propre à Windows.
## VERSION POUR WINDOWS
##
piece := symphonie
LILY_CMD := lilypond -ddelete-intermediate-files \
-dno-point-and-click
#Détermination du nom de CURDIR sous sa forme 8.3
#(solution pour les espaces dans le PATH)
workdir != $(shell for /f "tokens=*" %%b in ("$(CURDIR)") \
do @echo %%~sb)
.SUFFIXES: .ly .ily .pdf .mid
.DEFAULT_GOAL := score
PDFDIR := PDF
MIDIDIR := MIDI
VPATH := \
$(workdir)/Partitions \
$(workdir)/Pupitres \
$(workdir)/Notes \
$(workdir)/$(PDFDIR) \
$(workdir)/$(MIDIDIR)
%.pdf %.mid: %.ly | $(PDFDIR) $(MIDIDIR)
$(LILY_CMD) $< # tabulation au début de la ligne
move /Y "$*.pdf" $(PDFDIR)/ # tabulation au début
move /Y "$*.mid" $(MIDIDIR)/ # tabulation au début
$(PDFDIR):
mkdir $(PDFDIR)/
$(MIDIDIR):
mkdir $(MIDIDIR)/
notes := \
cello.ily \
figures.ily \
cor.ily \
hautbois.ily \
trioCordes.ily \
alto.ily \
violonUn.ily \
violonDeux.ily
commun := symphonieDefs.ily
$(piece)I.pdf: $(piece)I.ly $(notes) $(commun)
$(piece)II.pdf: $(piece)II.ly $(notes) $(commun)
$(piece)III.pdf: $(piece)III.ly $(notes) $(commun)
$(piece)IV.pdf: $(piece)IV.ly $(notes) $(commun)
$(piece).pdf: $(piece).ly $(notes) $(commun)
$(piece)-cello.pdf: $(piece)-cello.ly cello.ily $(commun)
$(piece)-cor.pdf: $(piece)-cor.ly cor.ily $(commun)
$(piece)-hautbois.pdf: $(piece)-hautbois.ly hautbois.ily $(commun)
$(piece)-alto.pdf: $(piece)-alto.ly alto.ily $(commun)
$(piece)-violonUn.pdf: $(piece)-violonUn.ly violonUn.ily $(commun)
$(piece)-violonDeux.pdf: $(piece)-violonDeux.ly violonDeux.ily $(commun)
.PHONY: score
score: $(piece).pdf $(commun)
.PHONY: parties
parties: $(piece)-cello.pdf \
$(piece)-violonUn.pdf \
$(piece)-violonDeux.pdf \
$(piece)-alto.pdf \
$(piece)-hautbois.pdf \
$(piece)-cor.pdf
.PHONY: mouvements
mouvements: $(piece)I.pdf \
$(piece)II.pdf \
$(piece)III.pdf \
$(piece)IV.pdf
all: score parties mouvements
Le Makefile suivant convient pour un document
lilypond-book réalisé avec LaTeX. Ce projet contiendra un
index, ce qui nécessitera de lancer une deuxième fois latex
pour mettre à jour les liens. Les fichiers résultants iront dans le
répertoire out pour ce qui est des pdf et dans le répertoire
htmlout pour ce qui est du html.
SHELL=/bin/sh
FILE=monprojet
OUTDIR=out
WEBDIR=htmlout
VIEWER=acroread
BROWSER=firefox
LILYBOOK_PDF=lilypond-book --output=$(OUTDIR) --pdf $(FILE).lytex
LILYBOOK_HTML=lilypond-book --output=$(WEBDIR) $(FILE).lytex
PDF=cd $(OUTDIR) && pdflatex $(FILE)
HTML=cd $(WEBDIR) && latex2html $(FILE)
INDEX=cd $(OUTDIR) && makeindex $(FILE)
PREVIEW=$(VIEWER) $(OUTDIR)/$(FILE).pdf &
all: pdf web keep
pdf:
$(LILYBOOK_PDF) # tabulation en début de ligne
$(PDF) # tabulation en début de ligne
$(INDEX) # tabulation en début de ligne
$(PDF) # tabulation en début de ligne
$(PREVIEW) # tabulation en début de ligne
web:
$(LILYBOOK_HTML) # tabulation en début de ligne
$(HTML) # tabulation en début de ligne
cp -R $(WEBDIR)/$(FILE)/ ./ # tabulation en début de ligne
$(BROWSER) $(FILE)/$(FILE).html & # tabulation en début de ligne
keep: pdf
cp $(OUTDIR)/$(FILE).pdf $(FILE).pdf # tabulation en début de ligne
clean:
rm -rf $(OUTDIR) # tabulation en début de ligne
web-clean:
rm -rf $(WEBDIR) # tabulation en début de ligne
archive:
tar -cvvf monprojet.tar \ # tabulation en début de ligne
--exclude=out/* \
--exclude=htmlout/* \
--exclude=monprojet/* \
--exclude=*midi \
--exclude=*pdf \
--exclude=*~ \
../MonProjet/*
AVENIR : faire que ça marche sous Windows
Ce makefile n’est malheureusement pas opérationnel sous Windows.
La seule alternative qui s’offre aux utilisateurs de Windows consiste à
créer un fichier de traitement par lot (.bat) qui contienne les
différentes commandes successives. Bien que cette manière de procéder
ne tienne aucun compte des dépendances entre fichiers, elle permet de
réduire le nombre de processus à lancer dans une seule commande. Vous
devrez enregistrer les lignes suivantes dans un fichier
construire.bat ou construire.cmd. Ce fichier pourra être
exécuté soit en ligne de commande, soit par un double clic sur son
icône.
lilypond-book --output=out --pdf monprojet.lytex cd out pdflatex monprojet makeindex monprojet pdflatex monprojet cd .. copy out\monprojet.pdf MonProjet.pdf
Voir aussi
Manuel d’utilisation :
Utilisation en ligne de commande,
Association musique-texte avec lilypond-book