5.5 Make y los Makefiles
Posiblemente todas las plataformas en que puede correr LilyPond,
contemplan una posibilidad de software llamada make
. Este
programa lee un archivo especial llamado Makefile
que define
las relaciones de dependencia entre los archivos y qué instrucciones
necesitamos dar al sistema operativo para producir un archivo a partir
de otro. Por ejemplo, el archivo de make detallaría cómo obtener
‘balada.pdf’ y ‘balada.midi’ a partir de ‘balada.ly’
mediante la ejecución de Lilypond.
Existen ocasiones en las que es buena idea crear un Makefile
para nuestro proyecto, bien sea por nuestra propia comodidad o como
cortesía para otros que posiblemente tengan acceso a nuestros archivos
fuente. Esto es cierto para proyectos muy grandes con muchos archivos
de inclusión y distintas opciones de salida (p.ej. partitura completa,
particellas, partitura del director, reducción para piano, etc.), o
para proyectos que requieren instrucciones difíciles para montarlas
(como los proyectos de lilypond-book
). La complejidad y
flexibilidad de los Makefiles varía enormemente según las necesidades
y la habilidad de los autores. El programa GNU Make viene instalado
en las distribuciones de GNU/Linux y en MacOS X, y también existe para
Windows.
Consulte el Manual de GNU Make para ver todos los detalles
sobre el uso de make
, pues lo que sigue a continuación ofrece
solamente una pincelada de todo lo que es capaz de hacer.
Las instrucciones que definen las reglas en un archivo de make
difieren en función de la plataforma; por ejemplo, las distintas
formas de Linux y MacOS usan bash
, mientras que Windows usa
cmd
. Observeque en MacOS X, tenemos que configurar el sistema
para que utilice el intérprete de órdenes. A continuación presentamos
algunos makefiles de ejemplo, con versiones tanto para Linux/MacOS
como para Windows.
El primer ejemplo es para una obra orquestal en cuatro movimientos con la estructura de directorios siguiente:
Sinfonia/ |-- MIDI/ |-- Makefile |-- Notas/ | |-- cello.ily | |-- cifras.ily | |-- trompa.ily | |-- oboe.ily | |-- trioCuerdas.ily | |-- viola.ily | |-- violinUno.ily | `-- violinDos.ily |-- PDF/ |-- Particellas/ | |-- sinfonia-cello.ly | |-- sinfonia-trompa.ly | |-- sinfonia-oboes.ly | |-- sinfonia-viola.ly | |-- sinfonia-violinUno.ly | `-- sinfonia-violinDos.ly |-- Partituras/ | |-- sinfonia.ly | |-- sinfoniaI.ly | |-- sinfoniaII.ly | |-- sinfoniaIII.ly | `-- sinfoniaIV.ly `-- sinfoniaDefs.ily
Los archivos ‘.ly’ de los directorios Partituras
y
Particellas
obtienen las notas de archivos ‘.ily’ que están en
el directorio Notas
:
%%% principio del archivo "sinfonia-cello.ly" \include ../definicionesSinf.ily \include ../Notas/cello.ily
El makefile tendrá los objetivos de partitura
(la pieza
completa en todo su esplendor), movimientos
(partitura completa
de los movimientos individuales) y particellas
(partes
individuales para los atriles). También existe un objetivo
archivo
que produce un tarball de los archivos fuente, adecuado
para compartirlo a través de la web o por correo electrónico. A
continuación presentamos el makefile para GNU/Linux o MacOS X. Se
debe guardar con el nombre exacto Makefile
el el directorio
superior del proyecto:
Nota: Cuando se define un objetivo o una regla de patrón, las líneas siguientes deben comenzar con tabuladores, no con espacios.
# nombre principal de los archivos de salida nombre = sinfonia # determinar cuántos procesadores existen CPU_CORES=`cat /proc/cpuinfo | grep -m1 "cpu cores" | sed s/".*: "//` # La instrucción para ejecutar lilypond LILY_CMD = lilypond -ddelete-intermediate-files \ -dno-point-and-click -djob-count=$(CPU_CORES) # Los sufijos utilizados en este Makefile. .SUFFIXES: .ly .ily .pdf .midi # Los archivos de entrada y salida se buscan dentro de los directorios relacionados en # la variable VPATH. Todos esllos son subdirectorios del directorio # en curso (dado por la variable de GNU make `CURDIR'). VPATH = \ $(CURDIR)/Partituras \ $(CURDIR)/PDF \ $(CURDIR)/Particellas \ $(CURDIR)/Notas # La regla de patrón para crear archivos PDF y MIDI a partir de un archivo de entrada LY. # Los archivos de salida .pdf se colocan en el subdirectorio `PDF', y los archivos # .midi van al subdirectorio `MIDI'. %.pdf %.midi: %.ly $(LILY_CMD) $<; \ # esta línea comienza con un salto de tabulación if test -f "$*.pdf"; then \ mv "$*.pdf" PDF/; \ fi; \ if test -f "$*.midi"; then \ mv "$*.midi" MIDI/; \ fi notas = \ cello.ily \ trompa.ily \ oboe.ily \ viola.ily \ violinUno.ily \ violinDos.ily # Dependencias de los movimientos. $(nombre)I.pdf: $(nombre)I.ly $(notas) $(nombre)II.pdf: $(nombre)II.ly $(notas) $(nombre)III.pdf: $(nombre)III.ly $(notas) $(nombre)IV.pdf: $(nombre)IV.ly $(notas) # Dependencias de la partitura completa. $(nombre).pdf: $(nombre).ly $(notas) # Dependencias de las particellas. $(nombre)-cello.pdf: $(nombre)-cello.ly cello.ily $(nombre)-trompa.pdf: $(nombre)-trompa.ly trompa.ily $(nombre)-oboes.pdf: $(nombre)-oboes.ly oboe.ily $(nombre)-viola.pdf: $(nombre)-viola.ly viola.ily $(nombre)-violinUno.pdf: $(nombre)-violinUno.ly violinUno.ily $(nombre)-violinDos.pdf: $(nombre)-violinDos.ly violinDos.ily # Teclee `make partitura' para generer la partitura completa de los cuatro # movimientos como un archivo único. .PHONY: partitura partitura: $(nombre).pdf # Teclee `make particellas' para generar todas las particellas. # Teclee `make fulanito.pdf' para generar la particella del instrumento `fulanito'. # Ejemplo: `make sinfonia-cello.pdf'. .PHONY: particellas particellas: $(nombre)-cello.pdf \ $(nombre)-violinUno.pdf \ $(nombre)-violinDos.pdf \ $(nombre)-viola.pdf \ $(nombre)-oboes.pdf \ $(nombre)-trompa.pdf # Teclee `make movimientos' para generar los archivos de los # cuatro movimientos de forma separada. .PHONY: movimientos movimientos: $(nombre)I.pdf \ $(nombre)II.pdf \ $(nombre)III.pdf \ $(nombre)IV.pdf all: partitura particellas movimientos archivo: tar -cvvf stamitz.tar \ # esta línea comienza con un salto de tabulación --exclude=*pdf --exclude=*~ \ --exclude=*midi --exclude=*.tar \ ../Stamitz/*
Existen ciertas complicaciones en la plataforma Windows. Después de
descargar e instalar el programa GNU Make para Windows, debemos
configurar la ruta adecuada en las variables de entorno del sistema de
forma que el shell del DOS pueda encontrar el programa Make. Para
hacerlo, pulse con el botón derecho sobre "Mi PC", elija
Propiedades
y Avanzadas
. Pulse sobre Variables de
entorno
, y luego en la pestaña Variables del sistema
,
seleccione Ruta
, pulse sobre editar
y añada la ruta al
archivo ejecutable de GNU Make, con lo que quedará algo parecido a lo
siguiente:
C:\Archivos de programa\GnuWin32\bin
El makefile en sí debe modificarse para que maneje distintas
instrucciones del shell y para que pueda tratar con los espacios que
aparecen en el nombre de algunos directorios del sistema
predeterminados. El objetivo archivo
se elimina porque Windows
no tiene la instrucción tar
, y Windows tiene también una
extensión predeterminada distinta para los archivos MIDI.
## VERSIÓN PARA WINDOWS ## nombre = sinfonia LILY_CMD = lilypond -ddelete-intermediate-files \ -dno-point-and-click \ -djob-count=$(NUMBER_OF_PROCESSORS) #obtener el nombre 8.3 de CURDIR (rodeo para los espacios en PATH) workdir = $(shell for /f "tokens=*" %%b in ("$(CURDIR)") \ do @echo %%~sb) .SUFFIXES: .ly .ily .pdf .mid VPATH = \ $(workdir)/Partituras \ $(workdir)/PDF \ $(workdir)/Particellas \ $(workdir)/Notas %.pdf %.mid: %.ly $(LILY_CMD) $< # esta línea comienza con un salto de tabulación if exist "$*.pdf" move /Y "$*.pdf" PDF/ # comienzo con tab if exist "$*.mid" move /Y "$*.mid" MIDI/ # comienzo con tab notas = \ cello.ily \ cifras.ily \ trompa.ily \ oboe.ily \ trioCuerdas.ily \ viola.ily \ violinUno.ily \ violinDos.ily $(nombre)I.pdf: $(nombre)I.ly $(notas) $(nombre)II.pdf: $(nombre)II.ly $(notas) $(nombre)III.pdf: $(nombre)III.ly $(notas) $(nombre)IV.pdf: $(nombre)IV.ly $(notas) $(nombre).pdf: $(nombre).ly $(notas) $(nombre)-cello.pdf: $(nombre)-cello.ly cello.ily $(nombre)-trompa.pdf: $(nombre)-trompa.ly trompa.ily $(nombre)-oboes.pdf: $(nombre)-oboes.ly oboe.ily $(nombre)-viola.pdf: $(nombre)-viola.ly viola.ily $(nombre)-violinUno.pdf: $(nombre)-violinUno.ly violinUno.ily $(nombre)-violinDos.pdf: $(nombre)-violinDos.ly violinDos.ily .PHONY: partitura partitura: $(nombre).pdf .PHONY: particellas particellas: $(nombre)-cello.pdf \ $(nombre)-violinUno.pdf \ $(nombre)-violinDos.pdf \ $(nombre)-viola.pdf \ $(nombre)-oboes.pdf \ $(nombre)-trompa.pdf .PHONY: movimientos movimientos: $(nombre)I.pdf \ $(nombre)II.pdf \ $(nombre)III.pdf \ $(nombre)IV.pdf all: partitura particellas movimientos
El Makefile siguiente es para un documento de lilypond-book
hecho en LaTeX. Este proyecto tiene un índice, que requiere ejecutar
la instrucción latex
dos veces para actualizar los enlaces.
Todos los archivos de salida se almacenan en el directorio
salida
para los documentos .pdf y en el directorio
salidahtml
para la salida en formato html.
SHELL=/bin/sh NOMBRE=miproyecto DIR_SALIDA=salida DIR_WEB=salidahtml VISOR=acroread NAVEGADOR=firefox LILYBOOK_PDF=lilypond-book --output=$(DIR_SALIDA) --pdf $(NOMBRE).lytex LILYBOOK_HTML=lilypond-book --output=$(DIR_WEB) $(NOMBRE).lytex PDF=cd $(DIR_SALIDA) && pdflatex $(NOMBRE) HTML=cd $(DIR_WEB) && latex2html $(NOMBRE) INDICE=cd $(DIR_SALIDA) && makeindex $(NOMBRE) VISTA_PREVIA=$(VISOR) $(DIR_SALIDA)/$(NOMBRE).pdf & all: pdf web guardar pdf: $(LILYBOOK_PDF) # comienza con un tab $(PDF) # comienza con un tab $(INDICE) # comienza con un tab $(PDF) # comienza con un tab $(VISTA_PREVIA) # comienza con un tab web: $(LILYBOOK_HTML) # comienza con un tab $(HTML) # comienza con un tab cp -R $(DIR_WEB)/$(NOMBRE)/ ./ # comienza con un tab $(NAVEGADOR) $(NOMBRE)/$(NOMBRE).html & # comienza con un tab guardar: pdf cp $(DIR_SALIDA)/$(NOMBRE).pdf $(NOMBRE).pdf # comienza con un tab clean: rm -rf $(DIR_SALIDA) # comienza con un tab web-clean: rm -rf $(DIR_WEB) # comienza con un tab archivo: tar -cvvf miproyecto.tar \ # comienza con un tab --exclude=salida/* \ --exclude=salidahtml/* \ --exclude=miproyecto/* \ --exclude=*midi \ --exclude=*pdf \ --exclude=*~ \ ../MiProyecto/*
HACER: conseguir que funcione en Windows
El makefile anterior no funciona en Windows. Una alternativa para los
usuarios de Windows sería crear un archivo de lotes sencillo que
contenga las instrucciones de montaje. Esto no rastrea las
dependencias en la manera en que lo hace un makefile, pero al menos
reduce el proceso de construcción a una sola instrucción. Guarde el
código siguiente como montaje.bat
o montaje.cmd
.
El archivo de lotes se puede ejecutar en la línea de comandos del DOS
o simplemente haciendo doble click sobre su icono.
lilypond-book --output=salida --pdf miproyecto.lytex cd salida pdflatex miproyecto makeindex miproyecto pdflatex miproyecto cd .. copy salida\miproyecto.pdf MiProyecto.pdf
Véase también
Manual de utilización del programa: Configuración para MacOS X, Utilización desde la línea de órdenes, LilyPond-book
Otros idiomas: English, deutsch, français, magyar, italiano, 日本語.
Acerca de la selección automática del idioma.