zoukankan      html  css  js  c++  java
  • 一起学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命令

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

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

  • 相关阅读:
    三数之和
    罗马数字与整数
    Oracle 开启或关闭归档
    Oracle RMAN scripts to delete archivelog
    Oracle check TBS usage
    Oracle kill locked sessions
    场景9 深入RAC运行原理
    场景7 Data Guard
    场景4 Data Warehouse Management 数据仓库
    场景5 Performance Management
  • 原文地址:https://www.cnblogs.com/wanghao-boke/p/11738659.html
Copyright © 2011-2022 走看看