Algo muy útil para los proyectos y que los IDE (programas que ayudan a programar) hacen de forma automática, son los makefiles. Make es una orden que se aplica a cualquier tarea donde algunos ficheros deben ser actualizados a partir de otros cuando éstos cambian.
Se basa un un fichero makefile donde se describen las relaciones entre los ficheros que componen el programa y las órdenes necesarias para cada uno de ellos. De forma automática actualiza sólo lo necesario, lo que haya cambiado y no todo.
#make de un programa
programa: objetivo2, objetivo3
comando orden
comando orden
objetivo2: objetivo3
comando orden
comando orden
objetivo3:
comando orden
comando orden demasiado largo pero que muy largo \
y el comando sigue en la segunda línea
- Cada fichero del programa es un objetivo (target) de una regla, menos cabeceras y fuentes.
- Cada objetivo aparece al principio de una línea seguido de dos puntos (:) y a continuación las dependencias (lo que necesita previamente).
- Tras cada objetivo e indentados con tabulaciones, van las ordenes.
- Make comienza con la primera regla que encuentra, por lo que se suele empezar con el programa en sí, ya que de él depende todo lo demás.
- Si una línea es muy larga, se puede dividir en dos con \
- Para poner comentarios se colocan después de #
variable= dependencia1.o cabecera1.h objetivo1: $(variable)Para usar la variable se puede usar tanto los paréntesis como las llaves.
orden ${variable}
Podemos usarlo en las dependencias o en las órdenes de la regla.
A veces sólo especificamos las dependencias (no hay órdenes) y vemos que para varios objetos, las dependencias se repiten. Se pueden agrupar de otra forma, pasando de varias líneas a unas pocas. Por ejemplo:
objetivo1: cabecera1.h cabecera2.h
objetivo2: cabecera1.h cabecera2.h
objetivo3: cabecera1.h cabecera2.h
objetivo4: cabecera1.h cabecera2.h
objetivo1 objetivo2 objetivo3 objetivo4: cabecera1.h cabecera2.h
Esta es la estructura básica y general de un makefile. El próximo día empezamos a hablar de las órdenes y de más cosas que tiene.