Makefile 是一个运行在 Unix, Linux 和其他平台的编译工具,帮助需要不同模块的程序编译执行。决定需要编译或者重编译的模块,这个系列的教程将帮助你提升在构建和使用 makefile 方面的能力。
Makefile 引导make工具来编译和链接程序模块,任何人如果想使用make来编译他们的程序并想获得makefile方面的知识应该阅读该系列的教程.
这套教程希望你有一定的 C 和 C++ 基础. 读者应该具备链接、装载的观念并知道如何在 Unix/Linux 环境下编译运行程序.
编译源代码文件可能会很累,特别是当你必须在包括几个源文件键入的编译命令时,每一次你需要编译。makefile 文件是简化这一任务的解决方案。Makefile 文件是帮助自动编译和管理项目的特殊格式文件。
例如,假设我们有以下的源文件。
- main.cpp
- hello.cpp
- factorial.cpp
- functions.h
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
#include <iostream> using namespace std; #include "functions.h" void print_hello(){ cout << "Hello World!"; }
factorial.cpp
#include "functions.h" int factorial(int n){ if(n!=1){ return(n * factorial(n-1)); } else return 1; }
functions.h
void print_hello(); int factorial(int n);
繁琐的方法来编译文件并获得可执行文件是使用下面的命令:
gcc main.cpp hello.cpp factorial.cpp -o hello
这个命令产生名为 hello
的二进制文件. 这个例子中我们一共有4个文件并且知道函数的调用顺序. 因此, 使用上面的命令来得到最终的二进制文件是可行的。但是对于一个有上千个源代码文件的大型项目,维持二进制编译将变得很困难。
make
命令帮你管理大的程序或者程序组. 当你开始编写大的程序, 你将看到重新编译一个大的程序任务所花的时间比小的程序要大,更进一步,你将注意到你经常在程序的一个小的片段上工组 (例如一个单独的函数), 程序的其他部分没有发生改变.
在后面的文章中大家将看到如何为我们的项目准备一个makefile文件
Comments