Por que Makefile?

Compilar os arquivos de código-fonte pode ser cansativo, especialmente quando você precisa incluir vários arquivos-fonte e digitar o comando de compilação toda vez que precisar compilar. Makefiles são a solução para simplificar essa tarefa.

Makefiles são arquivos de formato especial que ajudam a construir e gerenciar os projetos automaticamente.

Por exemplo, vamos supor que temos os seguintes arquivos de origem.

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

main.cpp

A seguir está o código para o arquivo de origem 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

O código fornecido a seguir é para o arquivo fonte hello.cpp -

#include <iostream>

using namespace std;

#include "functions.h"

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

factorial.cpp

O código para factorial.cpp é fornecido abaixo -

#include "functions.h"

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

functions.h

A seguir está o código para fnctions.h -

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

A maneira trivial de compilar os arquivos e obter um executável é executando o comando -

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

Este comando gera o binário hello . Neste exemplo, temos apenas quatro arquivos e sabemos a sequência das chamadas de função. Portanto, é possível digitar o comando acima e preparar um binário final.

No entanto, para um grande projeto onde temos milhares de arquivos de código-fonte, torna-se difícil manter as compilações binárias.

o makecomando permite que você gerencie grandes programas ou grupos de programas. Ao começar a escrever programas grandes, você percebe que recompilar programas grandes leva mais tempo do que recompilar programas curtos. Além disso, você percebe que normalmente trabalha apenas em uma pequena seção do programa (como uma única função), e grande parte do programa restante permanece inalterado.

Na seção subsequente, veremos como preparar um makefile para nosso projeto.