cartitas.com

Introducción a Make

7 de febrero de 2023

GNU Make es un utilidad para construir cosas. Lo que sea. Se puede usar para compilar programas en C++, JavaScript, o cualquier lenguaje. Pero también se puede usar con programas como ffmpeg o pandoc. Incluso lo puedes usar para desplegar aplicaciones. Además, casi siempre esta instalada por defecto en Linux y macOS. Así que no hay nada que instalar.

Hoy nada más quiero compartir un ejemplo básico.

Vocabulario

Para entender a Make, primero tenemos que aprender un poco de vocabulario. Aquí les tengo 4 términos importantes.

Aquí tienes el sintaxis. Las líneas de la receta tienen que estar tabuladas, a fuerzas. No pueden empezar con espacios.

objetivo: requisito1 requisito2
    receta línea 1
    receta línea 2

Las reglas se escriben en un archivo con nombre especial, se llama Makefile. Luego puedes ejecutar el comando make en el mismo directorio para construir un objetivo.

$ make objetivo

Ejemplo: crear un binario

Que crear un binario en C. Vamos a necesitar a la terminal, gcc, y un editor de texto para este ejemplo.

Crear archivos

Empieza con un directorio vacío.

$ mkdir hola
$ cd hola

Aquí tenemos una regla, la cual contiene una receta que construye al objetivo hola con el requisito hola.c. Guarda esto en un archivo con el nombre Makefile.

# Makefile
hola: hola.c
	gcc -o hola hola.c

Luego crea el archivo hola.c en el mismo directorio.

// hola.c
#include <stdio.h>

int main() {
	printf("¡Hola, mundo!\n");
	return 0;
}

Deberíamos tener estos archivos.

$ ls
hola.c  Makefile

Crear objectivo

Ahora lo bueno. Hay que pedirle a make que construya el binario hola. La receta se irá mostrando a medida que make ejecute las líneas.

Que make imprima la receta es genial porque te deja ver el progreso de la construccion de tu objetivo, pero es aún más importante para poder depurar después. Si hay una falla, sabrás exactamente cuál comando falló.

$ make hola
gcc -o hola hola.c

Bueno, en este ejemplo todo funcionó correctamente. Ahora podemos revisar el directorio de nuevo para ver un archivo nuevo, hola.

$ ls
hola  hola.c  Makefile

Tenemos el binario y lo podemos ejecutar.

$ ./hola
¡Hola, mundo!

Hacer cambios

Algo interesante pasa si ejecutamos make hola otra vez.

$ make hola
make: 'hola' está actualizado.

Esto es bueno. make ha detectado que el requisito hola.c no ha cambiado y así puede evitar hacer trabajo innecesario.

Solamente cuando haya cambiado el requisito, se ejecutará la receta de nuevo.

Que cambiar la línea de printf en hola.c para que diga algo diferente.

printf("¡Saludos a todos!\n");

Y ahora podemos ver que sí se compila el binario otra vez.

$ make hola
gcc -o hola hola.c
$ ./hola
¡Saludos a todos!

Resumen

GNU Make es una utilidad para crear cosas. En este ejemplo, Make nos ayudó con lo siguiente.

Véase también