Makefile

2023-03-30  本文已影响0人  Eugene_iOS

Makefile概述

Linux环境下,当用户编译文件过多,可以通过Makefile实现模块化编译文件。
Makefile它是一个脚本文件,定义了一套规则,决定了哪些文件要先编译,哪些文件后编译,哪些文件重新编译;我们可以根据规则来执行相应的脚本文件,实现自动化编译。
一个Linux项目工程通常只要一个make命令就可以完成编译、链接,甚至更复杂的功能。可以说,任何一个Linux源程序都带有一个Makefile文件。

Makefile优点

1、管理代码的编译,决定该编译什么文件,编译顺序,以及是否需要重新编译。
2、节省编译时间。如果文件有更改,只需重新编译此文件即可,无需重新编译整个工程。
3、一劳永逸。Makefile通常只需编写一次,后期就不用过多更改。

Makefile结构说明

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

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

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

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

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

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

Makefile的规则

Makefile规则的基本格式
格式一:单目标,多个依赖

<target> : <depends>
[tab] <commands>

格式二:多个目标,多个依赖,多个命令

<target1, target2> : <depends>
[tab] <commands>
[tab] <commands>

格式三:规则之间的嵌套

// 规则一,该规则依赖规则二、三
<target1> : <target2,target3>
[tab] <commands>
// 规则二
<target2> : <depends>
[tab] <commands>
// 规则三
<target3> : <depends>
[tab] <commands>

规则的基本格式解释

1、目标(target):通常是要生成的文件名称,目标可以是可执行文件或其他obj文件,也可以是一个动作的名称。
2、依赖文件(depends):生成目标 需要的文件,一个目标通常有几个依赖文件(也可以没有)。
3、命令(commands):make执行的动作,一个规则可以含几个命令(也可以没有),有多个命令时,每个命令占一行。

Makefile变量的分类

1、自定义变量

定义变量:
变量名 = 变量值
引用变量:
$(变量名) 或 ${变量名}
注意:
1、makefile变量名可以数字开头
2、变量大小写敏感
3、变量一般都在makefile的头部定义
4、变量几乎可在makefile的任何地方使用

2、系统环境变量

make工具会拷贝系统的环境变量,并将其设置为makefile的变量,在makefile中可直接读取或修改变量。

3、预定义变量

makefile中有很多预定义的变量,这些变量具有特殊的含义,可直接在makefile中使用。

常用的预定义变量
$@ :目标名
$<:依赖文件列表中的第一个文件
$^:依赖文件列表中除去重复文件的部分
CC:C 编译器的名称,默认值为cc
CGLAGS:C编译器的选项

写在最后

最实用的Makefile教程
Makefile 编写教程(由简至难)
Makefile详解及使用
一文入门Makefile
Makefile由浅入深--教程、干货

上一篇下一篇

猜你喜欢

热点阅读