es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

makefile para Metapost: cómo compilar el archivo-N.pdf

Quiero dejar que el archivo makefile maneje la compilación de figuras con metapost.
El archivo fuente es file.mp. Esto genera archivos .mps file.1, file.2, etc. que luego se convierten en file-1.pdf, file-2.pdf, etc.

Aquí están mis reglas:

export TEX = latex

%: %.1
        mptopdf $*

%.1: %.mp
        mpost $*

Entonces, cuando ejecuto make file se crean todos los archivos.

Sin embargo, no estoy satisfecho con esta solución. Es decir, me gustaría poder compilar solo uno de los archivos (por ejemplo, file-2.pdf) ingresando make file-2.
Desafortunadamente, no sé cómo escribir la regla para esto, aunque sospecho que podría ser trivial.

Pensé que el problema podría resolverse extrayendo el número del nombre del archivo dado en la línea de comandos (es decir, extraer 2 de file-2) pero no está claro para mí cómo hacerlo tampoco.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para permitir compilar solo un archivo específico (por ejemplo, file-2.pdf) utilizando make, puedes modificar las reglas existentes para incluir una variable para el número de archivo. Aquí tienes un ejemplo de cómo podrías modificar las reglas:

    export TEX = latex
    
    all: file
    
    file: file-1.pdf file-2.pdf
    
    file-%.pdf: file.%
        mptopdf $*
    
    file.%.1: file.%
        mpost $*
    

    Este makefile modificado te permite compilar todos los archivos .mp de una sola vez ejecutando make file. Sin embargo, si deseas compilar solo un archivo .mp específico y generar el archivo .pdf correspondiente, puedes hacerlo ejecutando make file-<n>.pdf, donde <n> es el número de archivo que deseas compilar.

    Por ejemplo, para compilar file-2.pdf, puedes ejecutar make file-2.pdf. Esto creará file-2.pdf compilando file.2 utilizando mpost y luego convirtiéndolo a PDF utilizando mptopdf.

    Para extraer el número de archivo del nombre de archivo dado en la línea de comandos, puedes utilizar la función $(basename) en make. Aquí tienes un ejemplo de cómo puedes modificar las reglas para extraer el número de archivo:

    export TEX = latex
    
    all: file
    
    file: file-1.pdf file-2.pdf
    
    file-%.pdf: file.%
        mptopdf $*
    
    file.%.1: file.%
        mpost $*
    

    .PHONY: file-%
    file-%:
    $(eval num := $(shell echo $* | sed ‘s/.*-//’))
    $(MAKE) file-$(num).pdf

    Este makefile modificado te permite compilar solo un archivo específico ejecutando make file-<n>, donde <n> es el número de archivo. La meta file-% extrae el número de archivo (<n>) del nombre de archivo dado utilizando sed y luego lo pasa a la meta file-<n>.pdf para la compilación.

Comments are closed.