在软件开发中,构建和管理项目是一个重要且复杂的任务。Makefile 是一种用于自动化构建过程的工具,它可以帮助开发人员管理依赖关系、编译源代码、生成可执行文件等。

Makefile 是一个非常强大的构建程序工具,主要用于管理程序的依赖关系和构建规则。一个 Makefile 通常包含多个规则,每个规则都包含一个目标和一组依赖关系,用于描述如何生成目标文件。Makefile 可以大大简化构建过程,使得开发人员可以更迅速地测试和部署他们的代码。 通常情况下,Makefile 的规则非常明确,可以让开发人员更加容易地理解和维护代码。例如,当我们需要添加新的依赖关系时,我们只需要在 Makefile 中添加相应的规则即可,而不需要手动编译每个目标文件。 此外,Makefile 还具有自动分析依赖关系的功能,可以根据依赖关系自动构建程序。这使得开发人员可以更加专注于编写代码,而不必花费时间和精力来手动构建程序。

Makefile结构说明

Makefile里主要包含了五个东西:变量定义、显式规则、隐晦规则、文件指示和注释。

1、变量的定义。在Makefile中我们要定义一系列的变量,变量一般都是字符串,这个有点像C语言中的宏,当Makefile被执行时,其中的变量都会被扩展到相应的引用位置上。

2、显式规则。显式规则说明了,如何生成一个或多的的目标文件。这是由Makefile的书写者明显指出,要生成的文件,文件的依赖文件,生成的命令。 刚才写的疑似shell脚本的Makefile全部都是显示规则。

3、隐晦规则。由于我们的make有自动推导的功能,所以隐晦的规则可以让我们比较粗糙地简略地书写Makefile,这是由make所支持的。

4、文件指示。其包括了三个部分,一个是在一个Makefile中引用另一个Makefile,就像C语言中的include一样。

5、注释。Makefile中只有行注释,和UNIX的Shell脚本一样,其注释是用“#”字符,这个就像C/C++中的“//”一样。如果你要在你的Makefile中使用“#”字符。

常用预定义变量

$*   不包含扩展名的目标文件名称。
$+   所有的依赖文件,以空格分开,并以出现的先后为序,可能包含重复的依赖文件。
$<   第一个依赖文件的名称。
$?   所有的依赖文件,以空格分开,这些依赖文件的修改日期比目标的创建日期晚。
$@    目标的完整名称。
$^   所有的依赖文件,以空格分开,不包含重复的依赖文件。
$% 		如果目标是归档成员,则该变量表示目标的归档成员名称。