5.5 Make i els Makefiles
Possiblement totes les plataformes on pot executar-se el LilyPond
contemplen una possibilitat de programari anomenada make
.
Aquest programa llegeix un fitxer especial anomenat
Makefile
que defineix les relacions de dependència entre
els fitxers i quines instruccions necessitem donar al sistema
operatiu per produir un fitxer a partir d’un altre. Per exemple,
el fitxer de make detallaria com obtenir
‘balada.pdf’ i ‘balada.midi’ a partir de ‘balada.ly’
mitjançant l’execució del LilyPond.
Hi ha ocasions en les quals és una bona idea crear un
Makefile
per al nostre projecte, bé sigui per la nostra
pròpia comoditat o com a cortesia per a altres que possiblement
tinguin accés als nostres fitxers font. Això és cert per a
projectes molt grans amb molts fitxers d’inclusió i diferents
opcions de sortida (per exemple partitura completa, particel·les,
partitura del director, reducció per a piano, etc.), o per a
projectes que requereixen ordres difícils per muntar-los (com els
projectes de lilypond-book
). La complexitat i flexibilitat
dels Mekfiles varia enormement segons les necessitats i
l’habilitat dels autors. El programa GNU Make ve instal·lat a les
distribucions del GNU/Linux i al MacOS X, i també existeix per al
Windows.
Consulteu el Manual de GNU Make per veure tots els
detalls sobre l’ús de make
, atès que el segueix a
continuació ofereix sols una pinzellada de tot els és capaç de fer.
Les instruccions que defineixen les regles a un fitxer de make
difereixen en funció de la plataforma; per exemple, les diferents
formes del GNU/Linux i del MacOS usen bash
, mentre que el Windows
usa cmd
. Observeu que al MacOS C, hem de configurar el
sistema perquè faci servir l’interpret d’ordres. A continuació
presentem alguns makefiles d’exemple, amb versions tant per al
GNU/Linux/MacOS com per al Windows.
El primer exemple és per a una obra orquestral en quatre moviments amb l’estructura de directoris següent:
Sinfonia/ |-- MIDI/ |-- Makefile |-- Notes/ | |-- cello.ily | |-- xifres.ily | |-- trompa.ily | |-- oboe.ily | |-- trioCordes.ily | |-- viola.ily | |-- violiU.ily | `-- violiDos.ily |-- PDF/ |-- Particelles/ | |-- sinfonia-cello.ly | |-- sinfonia-trompa.ly | |-- sinfonia-oboes.ly | |-- sinfonia-viola.ly | |-- sinfonia-violiU.ly | `-- sinfonia-violiDos.ly |-- Partitures/ | |-- sinfonia.ly | |-- sinfoniaI.ly | |-- sinfoniaII.ly | |-- sinfoniaIII.ly | `-- sinfoniaIV.ly `-- sinfoniaDefs.ily
Els fitxers ‘.ly’ dels directoris Partitures
i
Particelles
obtenen les notes de fitxers ‘.ily’ que estan al
directori Notes
:
%%% principi del fitxer "sinfonia-cello.ly" \include ../definicionsSinf.ily \include ../Notes/cello.ily
El makefile tindrà els objectius de partitura
(la peça
completa en tot el seu esplendor), moviments
(partitura
completa dels moviments individuals) i particel·les
(parts
individuals per als faristols). També hi ha un objectiu
fitxer
que produeix un fitxer tar de distribució (tarball)
dels fitxers font, adequat per compartir-lo a través de la web o
per correu electrònic. A continuació presentem el makefile per a
GNU/Linux o MacOS C. S’ha de desar amb el nom exacte
Makefile
al directori superior del projecte:
Nota: Quan es defineix un objectiu o una regla de patró, les línies següents han de començar amb tabuladors, no amb espais.
# nom principal dels fitxers de sortida nom = sinfonia # determinació del nombre de processadors CPU_CORES=`cat /proc/cpuinfo | grep -m1 "cpu cores" | sed s/".*: "//` # L'ordre per executar el LilyPond LILY_CMD = lilypond -ddelete-intermediate-files \ -dno-point-and-click -djob-count=$(CPU_CORES) # Els sufixos utilitzats a aquest Makefile. .SUFFIXES: .ly .ily .pdf .midi # Els fitxers d'entrada i de sortida es busquen dins dels directoris relacionats a # la variable VPATH. Tots ells són subdirectoris del directori # en curs (donat per la variable de GNU make `CURDIR'). VPATH = \ $(CURDIR)/Partitures \ $(CURDIR)/PDF \ $(CURDIR)/Particelles \ $(CURDIR)/Notes # La regla de patró per crear fitxers PDF i MIDI a partir fitxers d'entrada LY # Els fitxers de sortida .pdf es col·loquen al subdirectori `PDF', i els fitxers # .midi van al subdirectori `MIDI'. %.pdf %.midi: %.ly $(LILY_CMD) $<; \ # Aquesta línia comença amb un salt de tabulació if test -f "$*.pdf"; then \ mv "$*.pdf" PDF/; \ fi; \ if test -f "$*.midi"; then \ mv "$*.midi" MIDI/; \ fi notes = \ cello.ily \ trompa.ily \ oboe.ily \ viola.ily \ violiU.ily \ violiDos.ily # Dependències dels moviments $(nom)I.pdf: $(nom)I.ly $(notes) $(nom)II.pdf: $(nom)II.ly $(notes) $(nom)III.pdf: $(nom)III.ly $(notes) $(nom)IV.pdf: $(nom)IV.ly $(notes) # Dependències de la partitura completa. $(nom).pdf: $(nom).ly $(notes) # Dependències de les particel·les. $(nom)-cello.pdf: $(nom)-cello.ly cello.ily $(nom)-trompa.pdf: $(nom)-trompa.ly trompa.ily $(nom)-oboes.pdf: $(nom)-oboes.ly oboe.ily $(nom)-viola.pdf: $(nom)-viola.ly viola.ily $(nom)-violiU.pdf: $(nom)-violiU.ly violiU.ily $(nom)-violiDos.pdf: $(nom)-violiDos.ly violiDos.ily # Teclegeu `make partitura' per generar la partitura completa dels quatre # moviments com un fitxer únic. .PHONY: partitura partitura: $(nom).pdf # Teclegeu `make particelles' per generar totes les particel·les # Teclegeu `make pepet.pdf' per generar la particel·la de # l'instrument `pepet'. # Exemple: `make sinfonia-cello.pdf'. .PHONY: particellas particellas: $(nom)-cello.pdf \ $(nom)-violinUno.pdf \ $(nom)-violinDos.pdf \ $(nom)-viola.pdf \ $(nom)-oboes.pdf \ $(nom)-trompa.pdf # Teclegeu `make moviments' per generar els fitxers dels # quatre moviments de forma separada. .PHONY: moviments moviments: $(nom)I.pdf \ $(nom)II.pdf \ $(nom)III.pdf \ $(nom)IV.pdf all: partitura particelles moviments fitxer: tar -cvvf stamitz.tar \ # aquesta línia comença amb un salt de tabulació --exclude=*pdf --exclude=*~ \ --exclude=*midi --exclude=*.tar \ ../Stamitz/*
A la plataforma Windows hi ha certes complicacions. Després de
descarregar i instal·lar el programa GNU Make per al Windows,
haurem de configurar la ruta adequada a las variables d’entorn del
sistema de que l’intèrpret d’ordres del DOS pugui trobar el
programa Make. Per fer-lo, polseu amb el botó dret sobre "El meu
ordinador", escolliu Propietats
i Avançades
. Polseu
sobre Variables d'entorn
, i després a la pestanya
Variables del sistema
, seleccioneu Ruta
, polseu
sobre edita
i afegiu la ruta al fitxer executable de GNU
Make, amb la qual cosa quedarà quelcom semblant al següent:
C:\Fitxers de programa\GnuWin32\bin
El makefile en si s’ha de modificar perquè gestioni diverses
instruccions de l’intèrpret d’ordres i perquè pugui tractar amb
els espais que apareixen al nom d’alguns directoris del sistema
predeterminats. L’objectiu fitxer
s’elimina perquè el
Windows no té l’ordre tar
, i el Windows a més té una
extensió predeterminada diferent per als fitxers MIDI.
## VERSIÓ PER AL WINDOWS ## nom = sinfonia LILY_CMD = lilypond -ddelete-intermediate-files \ -dno-point-and-click \ -djob-count=$(NUMBER_OF_PROCESSORS) #obtenció del nom 8.3 de CURDIR (truc per als espais a PATH) workdir = $(shell for /f "tokens=*" %%b in ("$(CURDIR)") \ do @echo %%~sb) .SUFFIXES: .ly .ily .pdf .mid VPATH = \ $(workdir)/Partitures \ $(workdir)/PDF \ $(workdir)/Particelles \ $(workdir)/Notes %.pdf %.mid: %.ly $(LILY_CMD) $< # aquesta línia comença amb un salt de tabulació if exist "$*.pdf" move /Y "$*.pdf" PDF/ # començament amb tab if exist "$*.mid" move /Y "$*.mid" MIDI/ # començament amb tab notes = \ cello.ily \ xifres.ily \ trompa.ily \ oboe.ily \ trioCordes.ily \ viola.ily \ violiU.ily \ violiDos.ily $(nom)I.pdf: $(nom)I.ly $(notes) $(nom)II.pdf: $(nom)II.ly $(notes) $(nom)III.pdf: $(nom)III.ly $(notes) $(nom)IV.pdf: $(nom)IV.ly $(notes) $(nom).pdf: $(nom).ly $(notes) $(nom)-cello.pdf: $(nom)-cello.ly cello.ily $(nom)-trompa.pdf: $(nom)-trompa.ly trompa.ily $(nom)-oboes.pdf: $(nom)-oboes.ly oboe.ily $(nom)-viola.pdf: $(nom)-viola.ly viola.ily $(nom)-violiU.pdf: $(nom)-violiU.ly violiU.ily $(nom)-violiDos.pdf: $(nom)-violiDos.ly violiDos.ily .PHONY: partitura partitura: $(nom).pdf .PHONY: particelles particelles: $(nom)-cello.pdf \ $(nom)-violiU.pdf \ $(nom)-violiDos.pdf \ $(nom)-viola.pdf \ $(nom)-oboes.pdf \ $(nom)-trompa.pdf .PHONY: moviments moviments: $(nom)I.pdf \ $(nom)II.pdf \ $(nom)III.pdf \ $(nom)IV.pdf all: partitura particelles moviments
El Makefile següent és per a un document de
lilypond-book
fet en LaTeX. Aquest projecte té un
índex, que requereix executar l’ordre latex
dues vegades
per actualitzar els enllaços. Tots els fitxers de sortida
s’emmagatzemen al directori sortida
per als documents .pdf
i al directori sortidahtml
per a la sortida en format html.
SHELL=/bin/sh NOM=elmeuprojecte DIR_SORTIDA=sortida DIR_WEB=sortidahtml VISUALITZADOR=acroread NAVEGADOR=firefox LILYBOOK_PDF=lilypond-book --output=$(DIR_SORTIDA) --pdf $(NOM).lytex LILYBOOK_HTML=lilypond-book --output=$(DIR_WEB) $(NOM).lytex PDF=cd $(DIR_SORTIDA) && pdflatex $(NOM) HTML=cd $(DIR_WEB) && latex2html $(NOM) INDEX=cd $(DIR_SORTIDA) && makeindex $(NOM) VISTA_PREVIA=$(VISUALITZADOR) $(DIR_SORTIDA)/$(NOM).pdf & all: pdf web desar pdf: $(LILYBOOK_PDF) # comença amb un tab $(PDF) # comença amb un tab $(INDEX) # comença amb un tab $(PDF) # comença amb un tab $(VISTA_PREVIA) # comença amb un tab web: $(LILYBOOK_HTML) # comença amb un tab $(HTML) # comença amb un tab cp -R $(DIR_WEB)/$(NOM)/ ./ # $(NAVEGADOR) $(NOM)/$(NOM).html & # comença amb un tab desar: pdf cp $(DIR_SORTIDA)/$(NOM).pdf $(NOM).pdf # comença amb un tab clean: rm -rf $(DIR_SORTIDA) # comença amb un tab web-clean: rm -rf $(DIR_WEB) # comença amb un tab fitxer: tar -cvvf elmeuprojecte.tar \ # comença amb un tab --exclude=sortida/* \ --exclude=sortidahtml/* \ --exclude=elmeuprojecte/* \ --exclude=*midi \ --exclude=*pdf \ --exclude=*~ \ ../ElMeuProjecte/*
PERFER: aconseguir que funcioni a windows
El makefile anterior no funciona al Windows. Una alternativa per
als usuaris del Windows seria crear un fitxer de lots senzill que
contingui les ordres de muntatge. Això no segueix les
dependències com ho fa un makefile, però almenys redueix el procés
de construcció a una sola instrucció. Deseu el codi següent com
muntatge.bat
o muntatge.cmd
. El fitxer de lots
es pot executar en la línia d’ordres del DOS o simplement fent
doble clic sobre la seva icona.
lilypond-book --output=sortida --pdf elmeuprojecte.lytex cd sortida pdflatex elmeuprojecte makeindex elmeuprojecte pdflatex elmeuprojecte cd .. copy sortida\elmeuprojecte.pdf ElMeuProjecte.pdf
Vegeu també
Manual d’utilització del programa: Utilització des de la línia d'ordres, lilypond-book