왜 Makefile인가?

특히 여러 소스 파일을 포함하고 컴파일해야 할 때마다 컴파일 명령을 입력해야하는 경우 소스 코드 파일을 컴파일하는 것이 지루할 수 있습니다. Makefile은이 작업을 단순화하는 솔루션입니다.

Makefile은 프로젝트를 자동으로 빌드하고 관리하는 데 도움이되는 특수 형식 파일입니다.

예를 들어 다음과 같은 소스 파일이 있다고 가정 해 보겠습니다.

  • 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

이 명령은 hello 바이너리를 생성 합니다. 이 예에서는 4 개의 파일 만 있고 함수 호출의 순서를 알고 있습니다. 따라서 위의 명령을 입력하고 최종 바이너리를 준비하는 것이 가능합니다.

그러나 수천 개의 소스 코드 파일이있는 대규모 프로젝트의 경우 바이너리 빌드를 유지하기가 어려워집니다.

그만큼 make명령을 사용하면 큰 프로그램이나 프로그램 그룹을 관리 할 수 ​​있습니다. 큰 프로그램을 작성하기 시작하면 큰 프로그램을 다시 컴파일하는 것이 짧은 프로그램을 다시 컴파일하는 것보다 시간이 더 오래 걸린다는 것을 알 수 있습니다. 또한 일반적으로 프로그램의 작은 부분 (예 : 단일 기능)에서만 작업하고 나머지 프로그램의 대부분은 변경되지 않습니다.

다음 섹션에서는 프로젝트를 위해 makefile을 준비하는 방법을 살펴 봅니다.