zoukankan      html  css  js  c++  java
  • makefile 变量展开

    Makefile中给变量赋值:
    =     是递归展开式变量

              value1 = 5

              value2 = $(value1)

              value1 = 6

              最终$(value2)就变成了6

    :=    是直接展开式变量

              value1 := 5

              value2 := $(value1)

              value1 :=6

             最终$(value2)是5
     
     
    GUN make的执行过程分为两个阶段。

    第一阶段:读取所有的makefile文件(包括“MAKEFILES”变量指定的、指示符“include“指定的、以及命令行选项“-f(--file)“指定的makefile文件),内建所有的变量、明确规则和隐含规则,并建立所有目标和依赖之间关系结构链表。

    第二阶段:根据第一阶段已经建立的依赖关系结构链表决定哪些目标需要更新,并使用对应的规则來重建这些目标。


    1.在make执行的第一阶段如果变量和函数被展开,那么称此展开是“立即“的,其他的展开称之为“延后“的。

    2.变量定义解析规则如下:

    IMMEDIATE=DEFERRED
    IMMEDIATE?=DEFERRED
    IMMEDIATE:=IMMEDIATE
    IMMEDIATE+=DEFERRED or IMMEDIATE
    define IMMEDIATE
            DEFERRED
    Endef

    当变量使用追加符(+=)时,如果此前这个变量是一个简单变量(使用:=定义的)则认为它是立即展开的,其他情况时都被认为是“延后“展开的变量。

    3.所有使用到条件语句在产生分支的地方,make程序会根据预设条件将正确的分支展开。即条件分支的展开是“立即“的。其中包括:“ifdef”、“ifeq“、”ifndef“和“ifneq“所确定的所有分支命令

    4.所有的规则在make执行时,都按照如下的模式展开:

    IMMEDIATE:IMMEDIATE;DEFERRED
            DEFERRED


    注:上面的IMMEDIATE表示立即展开,DEFERRED表示延后展开

  • 相关阅读:
    别用言语考验底线
    QQ登陆接口
    cookie设置今日不提醒功能
    Sublime Text 3常用插件
    浏览器的标准模式与怪异模式的设置与区分方法
    JS中offsetTop、clientTop、scrollTop、offsetTop各属性介绍
    javascript中闭包的工作原理
    javascript判断图片是否加载完成方法整理
    社会十二效应法则
    小故事
  • 原文地址:https://www.cnblogs.com/idyllcheung/p/10429083.html
Copyright © 2011-2022 走看看