¿Cómo funciona make?

En pocas palabras, desde la página de manual de GNU make, el Makefile

describe las relaciones entre los archivos en su programa y también establece los comandos para actualizar cada archivo. En un programa, normalmente el archivo ejecutable se actualiza a partir de archivos de objetos, que a su vez se compilan compilando archivos fuente.

Por ejemplo:

  prueba: prueba.o
     cc -o test test.o

 test.o: test.c
     cc -c -o prueba.o prueba.c

básicamente dice “si el binario de test es anterior a test.o o no existe, ejecute el compilador de C para crearlo” y “si test.o es anterior a test.c o no existe, ejecute el compilador de C a crearlo “.

make simplemente lee en su Makefile y comprueba qué archivos no están actualizados con sus dependencias (o si no existen). Para cada uno de esos archivos, make ejecuta los comandos correspondientes especificados para los archivos. En el ejemplo anterior, si todo lo que tenía era test.c , make descubriría automáticamente que tenía que ejecutar el segundo comando cc antes que el primero.

Introduce una lista de cambios de archivo / archivo y un gráfico acíclico dirigido (DAG), luego procesa el DAG para ejecutar los comandos apropiados de arriba hacia abajo, según sea necesario para actualizar los archivos dependientes.
Esto es muy ineficiente cf. cuando las flechas suben.

La respuesta a su pregunta se encuentra en el siguiente nivel de la página 3

Cómo escribir el primer archivo MAKE para el código fuente c en Linux