¿Puedes refactorizar una receta de Makefile?
Para refactorizar tu Makefile y evitar la repetición de código, puedes usar una función con patrones (pattern rules) combinada con variables automáticas. Aquí te muestro cómo hacerlo:
🔄 Makefile refactorizado (versión DRY)
# Lista de municipios a procesar MUNICIPIOS := santa_ana nacozari_de_garcia # Regla para generar todos los reportes all: $(addprefix reports/municipio_,$(addsuffix .tex,$(MUNICIPIOS))) # Regla patrón para cualquier municipio reports/municipio_%.tex: data/non-tabular/time_and_distance_%.json reports/templates/municipio.tex jinja-render \ --report-name "municipio" \ --summary-path "$<" mv reports/municipio.tex $@
🔍 Explicación:
Variables:
MUNICIPIOS: Lista de sufijos de municipios.addprefix/addsuffix: Generan los nombres de archivos objetivo (ej:reports/municipio_santa_ana.tex).
Regla patrón (
%):El símbolo
%actúa como comodín para cualquier municipio.$<: Variable automática que representa la primera dependencia (el archivo JSON correspondiente).
Ventajas:
Para añadir un nuevo municipio, solo agrégalo a la lista
MUNICIPIOS.No necesitas repetir la receta para cada caso.
📌 Uso:
make # Genera todos los reportes make reports/municipio_santa_ana.tex # Genera solo uno
🛠️ Si necesitas personalización adicional:
# Versión con parámetros adicionales define render_municipio jinja-render \ --report-name "municipio" \ --summary-path "data/non-tabular/time_and_distance_$(1).json" \ --extra-param "valor" mv reports/municipio.tex reports/municipio_$(1).tex endef reports/municipio_%.tex: data/non-tabular/time_and_distance_%.json reports/templates/municipio.tex $(call render_municipio,$*)
¡Esta estructura hace tu Makefile escalable y mantenible!
No todo es miel sobre hojuelas. El problema que surge es que si falta un ingrediente no te dice cuál ingrediente falta. En lugar de eso te dice que no exite la receta.

Comentarios
Publicar un comentario