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.
- objetivo: lo que quieres crear, comúnmente un binario
- requisito: una dependencia necesaria para construir el objetivo, por ejemplo un archivo de código fuente
- receta: el comando que toma el requisito y crea el objetivo
- regla: el conjunto de objetivo, requisito, y receta
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.
- documentar cómo se crea el binario
hola
- acortar un comando largo de
gcc
a un simplemake hola
- optimizar la compilación de
hola
al evitar trabajo innecesario