【Linux】学会使用make命令和makefile文件编程
make工具可以在必要时重新编译所有受改动影响的源文件,极大地提高效率。
make命令和makefile文件的结合提供了一个在项目管理领域十分强大的工具。它不仅常被用于控制源代码的编译,而且还用于手册也的编写以及将应用程序安装到目标目录。
makefile文件由一组依赖关系和规则构成。每个依赖关系由一个目标(即将要创建的文件)和一组该目标所依赖的源文件组成。而规则描述了如何通过这些依赖文件创建目标。一般说来,目标是一个单独的可执行文件。
make命令会读取makefile文件的内容,它首先确定目标文件或要创建的文件,然后比较该目标锁依赖的源文件的日期和时间以决定该采取哪条规则来构造目标。通常在创建最终目标文件之前,它需要先创建一些中间目标。make命令根据makefile文件来确定目标文件的创建顺序以及正确的规则调用顺序。
最常用的三个选项如下所示:
-k或者--keep-going
执行命令遇到错误时不终止make的执行,make尽最大可能执行所有的命令,直到出现致命错误才终止
-f filename或者--file=FILE或者--makefile=FILE
使用指定文件作为makefile文件
-n或者--just-print或者--dry-run
只打印出要执行的命令
注意,如果未使用-f选项,那么婊子版本的make命令会首先在当前目录下查找名为makefile的文件。如果该文件不存在,会查找名为Makefile文件。但是如果是在Linux系统中,使用的可能是GNUMake,这个版本的make命令将在搜索makefile文件和Makefile文件之前首先查找名为GNUMakefile的文件。按照管理,许多linux程序员使用文件名Makefile。
为了指示make命令创建一个特定的目标,可以把该目标的名字作为make命令的一个参数。如果不这样做,make命令将试图创建列在makefile文件中的第一个目标。同菜的做法是在makefile文件中将第一个目标定义为all,然后再列出其他从属目标。这个约定明确告诉make命令,在未指定特定目标时,默认情况下应该创建哪个目标。
依赖关系
依赖关系定义了最终应用程序里的每个文件与源文件之间的关系。
比如,有如下源代码:
源代码:
a.h和c.h为空。
b.h:
#include <stdlib.h>#include "a.h"extern void function_two();extern void function_three();int main(){ function_two(); function_three(); exit(EXIT_SUCCESS);}