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表示延后展开

  • 相关阅读:
    django+uwsgi+nginx实现负载均衡
    centos7 pip安装
    centos虚拟环境配置
    cenots7更换国内pip源
    FastDFS缩容
    FastDFS基于group扩容
    centos同步系统时间
    centos永久开放端口
    pip更换国内源
    Java四种访问修饰符
  • 原文地址:https://www.cnblogs.com/idyllcheung/p/10429083.html
Copyright © 2011-2022 走看看