工学1号馆

home

Makefile教程(1)– Why Makefile?

Wu Yudong    December 07, 2016     Linux/Unix   564   

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

No comments yet.
To verify that you are human, please fill in "七"(required)