一起学Makefile(一)

make和makefile

makefile文件帮助我们记录了整个项目工程的所有需要编译的文件列表,这样我们在编译时仅需要输入简单的make命令就能编译出我们期望的结果。

makefile文件反映了整个项目中各个模块的依赖关系,这样我们改动了某些源文件以后,仅需简单的输入make命令,make工具就会根据makefile文件里描述的依赖关系帮助我们分析那些模块需要重新编译,并执行相应的操作。

在linux/unix开发环境中,makefile文件则是描述了一个特定编译系统所需要的策略,而make工具则是通过解析makefile文件并执行相应的命令来帮助我们构建其编译系统。

makefile简介

makefile就是一个简单的文本文件,它基本就是有一条条规则构造。

一条makefile的规则构成如下:

target:prerequisites

<tab> command1

<tab> command2

.....

<tab> command

target:规则的目标,可以简单理解为这条规则存在的目的是什么。通常是程序中间或者最后需要生成的文件名,也可以不对应具体的文件,而仅仅就是个概念上的规则目标。

prerequisites:规则的依赖列表,可以简单的理解为要达到本条规则的目标所需要的先决条件是什么。可以是文件名,也可以是其他规则的目标;

command:规则的命令,可以简单的理解为当目标所需要的先决条件的满足了之后,需要执行什么动作来达成规则的目标。规则的命令其实就是shell命令。一条规则中可以有多行命令,特别注意:每行命令都必须以tab键开始。

make工作原理

make命令如何使用?

make从哪里读取makefile?

mak如何解析执行makefile文件的规则?

make命令的基本使用范式如下:

make [ -f makefile ] [ options ] ... [ targets ] ...

使用make命令最简单的方式主要有以下四种方式:

1.简单粗暴,不带任何参数,直接指向make:

make

2.指定makefile文件

make –f <makefile_name>

3.指定makefile目标

make <target>

4.到指定目录下执行make

make –C <subdir> <target>

在执行make 的时候,我们可以带上 –f <文件名>参数,来指定make命令从哪里读取make文件;而如果我们不显示指定,则make就会在当前目录下依次查找名字为GNUmakefile,和Makefile,makefile的文件来作为其makefile文件。

在读取完makefile的内容后,make工具并不是逐条去执行makefile里的规则,而是以某条规则为突破口,多米诺骨牌效应式的去执行makefile里的规则。而这条作为突破口的规则的目标,称为终极目标 ,我们可以在执行make时以参数的形式指定终极目标,从而执行作为突破口的规则,如果我们不显式指定终极目标,make一般情况下将选择makefile的第一条规则的目标作为终极目标。

一般情况下,make执行一条规则的具体过程是这样的:

make解析makefile的流程如下:
假设makefile内容如下:

终极目标:依赖A  依赖B 依赖C

    终极目标命令

依赖A:子依赖A1 子依赖A2

    依赖A命令

依赖B:子依赖B1 子依赖B2

    依赖B命令

依赖C:子依赖C1 子依赖C2

    依赖C命令

过程一,以终极目标为树根,解析出整颗依赖树:

过程二,对整颗依赖树以从底到上,从左到右的顺序,解析执行每一条规则:

猜你喜欢

转载自www.cnblogs.com/wanghao-boke/p/11738659.html
今日推荐