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

  • 相关阅读:
    hdu 携程全球数据中心建设 (球面距离 + 最小生成树)
    next_permutation()函数 和 prev_permutation() 按字典序求全排列
    poj 3792 Area of Polycubes (简单模拟)
    poj 3790 Recursively Palindromic Partitions (递推)
    hdu 1575 Tr A (矩阵快速幂入门题)
    hdu 2986 Ballot evaluation (模拟)
    sscanf() 和 sprintf()的用法。
    Codeforces Round #239 (Div. 2)
    hdu 2372 El Dorado (dp)
    hdu 3433 A Task Process(dp+二分)
  • 原文地址:https://www.cnblogs.com/idyllcheung/p/10429083.html
Copyright © 2011-2022 走看看