为什么使用Makefile
编译源代码文件是一件很累人的事情,尤其是当你每次需要编译的时候都要包括几个源代码文件并输入编译命令。Makefile是简化这一任务的解决方案。
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;
}
function.h
下面是fnctions.h的代码 –
void print_hello();
int factorial(int n);
编译文件并获得可执行文件的简单方法是运行命令–:
gcc main.cpp hello.cpp factorial.cpp -o hello
这个命令生成了 Hello 二进制。在这个例子中,我们只有四个文件,而且我们知道函数调用的顺序。因此,输入上述命令并准备一个最终的二进制文件是可行的。
然而,对于一个有数千个源代码文件的大型项目来说,维护二进制文件的构建变得很困难。
make 命令允许你管理大型程序或程序组。当你开始编写大型程序时,你注意到重新编译大型程序比重新编译小型程序需要更多的时间。此外,你还注意到,你通常只对程序的一小部分进行处理(如一个函数),而其余的大部分程序则没有变化。
在接下来的章节中,我们将看到如何为我们的项目准备一个makefile。