왜 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을 준비하는 방법을 살펴 봅니다.