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

  • 相关阅读:
    MQTT简单demo(java)
    MQTT协议开发心得
    浏览器播放RTSP格式视频流的解决方法
    JSON学习
    Redis安装和java代码实现增删改查
    创建一个简单的SpringMVC框架
    oracle创建只读权限的用户简单四步走(创建用户/赋连接权限/赋表权限/创建同义词)
    html读取图片
    ORACLE多表关联UPDATE 语句
    Oracle 闪回查询
  • 原文地址:https://www.cnblogs.com/idyllcheung/p/10429083.html
Copyright © 2020-2023  润新知