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命令

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

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

  • 相关阅读:
    AJAX
    Aliyun服务器配置Redis
    Aliyun服务器配置MySQL
    Python基础之迭代器详解
    Python基础之函数
    Flask入门--URL
    认识Web
    肖知兴:企业的底层逻辑与企业家的突破(下)
    建造者模式(Bulider模式)详解
    为什么我强烈推荐你用枚举来实现单例模式
  • 原文地址:https://www.cnblogs.com/wanghao-boke/p/11738659.html
Copyright © 2011-2022 走看看