Учебники

Почему Makefile?

Компиляция файлов исходного кода может быть утомительной, особенно когда вам нужно включить несколько исходных файлов и вводить команду компиляции каждый раз, когда вам нужно скомпилировать. Makefiles — это решение, упрощающее эту задачу.

Makefiles — это файлы специального формата, которые помогают автоматически создавать проекты и управлять ими.

Например, предположим, у нас есть следующие исходные файлы.

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

main.cpp

Ниже приведен код для исходного файла 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

Код, приведенный ниже, предназначен для исходного файла hello.cpp —

#include <iostream>

using namespace std;

#include "functions.h"

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

factorial.cpp

Код для factorial.cpp приведен ниже —

#include "functions.h"

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

functions.h

Ниже приведен код для fnctions.h —

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

Тривиальный способ компилировать файлы и получить исполняемый файл, выполнив команду —

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

Эта команда генерирует привет двоичный файл. В этом примере у нас всего четыре файла, и мы знаем последовательность вызовов функций. Следовательно, можно ввести указанную выше команду и подготовить окончательный двоичный файл.

Однако для большого проекта, в котором у нас есть тысячи файлов исходного кода, становится сложно поддерживать двоичные сборки.

Команда make позволяет вам управлять большими программами или группами программ. Когда вы начинаете писать большие программы, вы замечаете, что перекомпиляция больших программ занимает больше времени, чем перекомпиляция коротких программ. Более того, вы замечаете, что обычно работаете только над небольшим разделом программы (например, над одной функцией), и большая часть оставшейся программы остается неизменной.

В следующем разделе мы увидим, как подготовить make-файл для нашего проекта.