Me gustan los Makefiles
(switowski.com)-
Me gustan los Makefiles. Han pasado más de 10 años desde que los usé por primera vez. Incluso en ese entonces parecían una tecnología antigua. Con el paso del tiempo aparecieron y desaparecieron nuevas herramientas de build, pero Makefile seguía usándose. Me familiaricé con él al participar en proyectos y, en algún momento, terminé agarrándole gusto. Hoy es la primera herramienta de automatización que uso cuando empiezo un proyecto nuevo.
-
La razón por la que me gustan los Makefiles es que siguen una convención no oficial para implementar el mismo conjunto de comandos. Cuando me topo con un proyecto nuevo y veo un archivo
Makefile, ejecutomakeomake build, luegomake install, y el proyecto se compila y queda configurado. O al menos puedo enterarme de los pasos adicionales que hacen falta. -
Intento aplicar la misma convención en mis propios proyectos. Si abro la carpeta de un proyecto viejo y ejecuto
make dev, se realizan todos los pasos necesarios para compilar el proyecto y levantar el servidor de desarrollo. Como he usado distintas tecnologías, cada una tenía comandos diferentes. Con Makefile, incluso los proyectos que no he tocado en meses o años se pueden manejar fácilmente. -
Makefile es simple. No uso condicionales, flags ni otras funciones complejas. La mayoría de las tareas consisten en uno o más comandos de shell. También podría escribir un script de bash con algunas funciones, pero un Makefile es más fácil y más rápido de escribir.
-
La mayoría de los proyectos personales incluyen tareas comunes como estas:
dev: iniciar el servidor de desarrollobuild: compilar el proyecto (si hace falta una etapa de build)deploy: desplegar/publicar el proyecto
-
Este blog tiene un Makefile simple con un solo target:
dev: npm run dev -
En proyectos más complejos uso Makefiles como este:
# Ejecutar el servidor de desarrollo dev: bundle exec jekyll serve --unpublished -w --config _config.yml,_config-dev.yml --livereload # Compilar assets build: npm run gulp build # Vigilar una carpeta específica y procesar assets watch: npm run gulp watch -- --wip # Compilar el sitio web localmente, cifrarlo y desplegarlo al servidor de Netlify deploy: JEKYLL_ENV=production bundle exec jekyll build; \ make encrypt; \ netlify deploy --prod # Cifrar la carpeta "_site" encrypt: npx staticrypt _site/*.html -r -d _site -
En el ejemplo anterior estoy ignorando la existencia de los phony targets. Si existe un archivo llamado
dev,build,watch,deployoencrypt, puede que el Makefile no funcione como se espera. -
GNU Make es muy universal. En Linux es muy probable que ya venga instalado. En mi MacBook tampoco recuerdo haberlo instalado explícitamente. Seguramente vino junto con otras herramientas. Make es simple y tiene menos dependencias adicionales que otras herramientas de build. Eso puede ser útil en entornos restringidos. Es muy probable que Make ya esté disponible. Y si no, siempre se pueden ejecutar manualmente en la shell los comandos del Makefile.
-
No estoy en contra de otras herramientas de build. Me interesa descubrir herramientas nuevas. Pero sigo usando Make para orquestar distintas herramientas.
Resumen de GN⁺
- Makefile facilita la gestión al ofrecer un conjunto consistente de comandos en distintos proyectos.
- Su sintaxis simple y la poca cantidad de dependencias lo hacen útil incluso en entornos restringidos.
- Puede usarse junto con diversas herramientas de build, por lo que ofrece bastante flexibilidad.
- Herramientas con funciones similares incluyen
CMake,NinjayGradle.
2 comentarios
Si un
makefileno define dependencias, reemplazarlo porjustfileofrece una mejor experiencia de uso.Comentarios en Hacker News
Ánimo para usar Make
Problemas de los Makefiles
Ventajas de Make
Uso de objetivos PHONY
mtimeDebate acalorado sobre Make
Usos variados de Make
Límites de Make y alternativas
mtimepara verificar si las entradas están actualizadas, pero eso puede causar problemasCambio a Justfiles
Uso simple del Makefile