用make工具自动化构建

只要记下修改过哪些文件,就可以很快地用gcc编译程序。这是一件很麻烦的事,但很容易自动化。想象有一个文件,这个文件是由另一个文件生成的,比如从源文件编译过来的目标文件:

用make工具自动化构建 - 图1

你怎么知道thruster.o文件是否需要重新编译呢?只要看一下这两个文件的时间戳就行了,如果thruster.o文件比thruster.c文件旧,就需要重新创建thruster.o;否则就说明thruster.o已经是最新的了。

非常简单的规则。如果你掌握了某样东西的简单规则,别多想,自动化它……

make是一个可以替你运行编译命令的工具。make会检查源文件和目标文件的时间戳,如果目标文件过期,make就会重新编译它。

但是做到所有这些事情前,需要告诉make源代码的一些情况。make需要知道文件之间的依赖关系,同时还需要告诉它你具体想如何构建代码。

make需要知道什么?

make编译的文件叫目标(target)。严格意义上讲,make不仅仅可以用来编译文件。目标可以是任何用其他文件生成的文件,也就是说目标可以是一批文件压缩而成的压缩文档。

对每个目标,make需要知道两件事:

  • 依赖项。

生成目标需要用哪些文件。

  • 生成方法。

生成该文件时要用哪些指令。

依赖项和生成方法合在一起构成了一条规则。有了规则,make就知道如何生成目标。

用make工具自动化构建 - 图2