¿Por qué Makefile?

Compilar los archivos de código fuente puede resultar agotador, especialmente cuando tiene que incluir varios archivos fuente y escribir el comando de compilación cada vez que necesita compilar. Los Makefiles son la solución para simplificar esta tarea.

Makefiles son archivos de formato especial que ayudan a construir y administrar los proyectos automáticamente.

Por ejemplo, supongamos que tenemos los siguientes archivos fuente.

  • main.cpp
  • hello.cpp
  • factorial.cpp
  • functions.h

main.cpp

El siguiente es el código para el archivo fuente main.cpp:

#include <iostream>

using namespace std;

#include "functions.h"

int main(){
   print_hello();
   cout << endl;
   cout << "The factorial of 5 is " << factorial(5) << endl;
   return 0;
}

hello.cpp

El código que se proporciona a continuación es para el archivo fuente hello.cpp:

#include <iostream>

using namespace std;

#include "functions.h"

void print_hello(){
   cout << "Hello World!";
}

factorial.cpp

El código para factorial.cpp se da a continuación:

#include "functions.h"

int factorial(int n){
   
   if(n!=1){
      return(n * factorial(n-1));
   } else return 1;
}

functions.h

El siguiente es el código para fnctions.h -

void print_hello();
int factorial(int n);

La forma trivial de compilar los archivos y obtener un ejecutable es ejecutando el comando:

gcc  main.cpp hello.cpp factorial.cpp -o hello

Este comando genera un binario de saludo . En este ejemplo, solo tenemos cuatro archivos y conocemos la secuencia de las llamadas a la función. Por lo tanto, es posible escribir el comando anterior y preparar un binario final.

Sin embargo, para un proyecto grande donde tenemos miles de archivos de código fuente, resulta difícil mantener las compilaciones binarias.

los makeEl comando le permite administrar grandes programas o grupos de programas. A medida que comienza a escribir programas grandes, nota que volver a compilar programas grandes lleva más tiempo que volver a compilar programas cortos. Además, observa que normalmente solo trabaja en una pequeña sección del programa (como una única función) y gran parte del programa restante no se modifica.

En la siguiente sección, vemos cómo preparar un archivo MAKE para nuestro proyecto.