Probando GNU Make de forma sencilla
Hola, soy Munou.
Entre las cosas que estoy creando, tengo cuckooget, y como he añadido soporte para la instalación con pip y me resulta tedioso realizar el proceso de instalación cada vez durante la fase de desarrollo, esta vez he probado a usar GNU Make.
La verdad es que tenía y había leído el libro de O'Reilly sobre GNU Make, pero como se basaba en C/C++, pensé que no tendría la oportunidad de usarlo. Sin embargo, esta vez sentí que si lo incorporaba, podría funcionar bien, así que lo hice.
Makefile
Así quedó.
$ cat Makefile
.PHONY: all check-deps build install clean done
WHEEL_DIR = lib/target/wheels
EGG_INFO = cuckooget.egg-info src/cuckooget.egg-info
all: check-deps build
check-deps:
@command -v pyenv >/dev/null || (echo "Por favor, instala pyenv" ; exit 1;)
@command -v python3 >/dev/null || (echo "Por favor, instala Python3" ; exit 1;)
@command -v maturin >/dev/null || ( echo "Por favor, instala maturin (pip install maturin)"; exit 1; )
build:
@echo "Compilando con maturin..."
cd lib && maturin build
install:
pip install . --force-reinstall
pip install $(WHEEL_DIR)/*.whl --force-reinstall
@echo "¡Hecho! Cómo usar \`ck -h\`"
clean:
rm -rf build lib/target $(EGG_INFO)
done:
@echo "Todos los pasos completados."
Rust se compila por separado para ser llamado como una librería de Python, pero con make, solo se realiza la compilación de Rust.
Gracias a la adición de make clean, ahora puedo eliminar los archivos temporales al instante, lo cual es bastante cómodo.
¿Algo más?
Más adelante, creo que podría ser bueno introducirlo en otros proyectos, pero si estás trabajando en un solo proyecto y hay muchas cosas desordenadas, creo que agruparlas en un Makefile facilita la verificación de lo que se puede ejecutar, lo cual es bueno. Sin embargo, si solo estás haciendo cosas pequeñas, no es necesario.
Hasta la próxima. Saludos.