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

makefile 变量展开的更多相关文章

  1. makefile变量赋值

    在定义变量的值时,我们可以使用其它变量来构造变量的值,在Makefile中有两种方式来在用变量定义变量的值. 先看第一种方式,也就是简单的使用“=”号,在“=”左侧是变量,右侧是变量的值,右侧变量的值 ...

  2. makefile笔记5 - makefile变量

    在 Makefile 中的定义的变量,就像是 C/C++语言中的宏一样,他代表了一个文本字串,在 Makefile 中执行的时候其会自动原模原样地展开在所使用的地方.其与 C/C++所不同的是,你可以 ...

  3. 【 MAKEFILE 编程基础之三】详解 MAKEFILE 变量的定义规则使用!

    本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/gcc-makefile/770.html   ...

  4. Makefile变量

    自定义变量 = 是最基本的赋值,会把整个makefile展开之后再决定是多少 x=foo y=$(x)bar #y是asdbar,不是foobar x=asd := 是覆盖之前的值,和=不同,和赋值的 ...

  5. 如何调试makefile变量

    六.七年前写过一篇<跟我一起写Makefile>,直到今天,还有一些朋友问我一些Makefile的问题,老实说,我有一段时间没有用Makefile了,生疏了.回顾,这几年来大家问题我的问题 ...

  6. makefile变量定义应用到c语言

    makefile是为组织程序工程的,其定义的宏怎样应用到c程序中呢? 我们知道Makefile中可定义变量或导出变量,make命令可定义变量:编译器(如gcc)可通过CFLAGS定义宏. 但如何才能使 ...

  7. 开始编写Makefile(二)Makefile变量的使用

    Makefile可以使用变量代替 命令行:make -f Makefile2 说明开始make一个名为Makefile2的文件 ###############定义变量################# ...

  8. Linux makefile教程之使用变量五[转]

    使用变量 ———— 在 Makefile中的定义的变量,就像是C/C++语言中的宏一样,他代表了一个文本字串,在Makefile中执行的时候其会自动原模原样地展开在所使 用的地方.其与C/C++所不同 ...

  9. Makefile学习(一)变量

    鉴于之前有一些了解,还有自己的学习习惯,我一上来就看Makefile的变量这一章.主要脉络是根据GNU make中文手册. 第六章:Makefile中的变量 6使用变量 定义:变量是一个名字,代表一个 ...

随机推荐

  1. python的开发语言介绍

    -开发语言: 高级语言:python.java.c#.php.GO.ruby.c++    ===>字节码 低级语言:c.汇编   ===>机器码 语言之间的对比: PHP:适用于写网页, ...

  2. golang gui library 库

    andlabs/ui已经重写,稳定性增强,但是组件很少,只提供了几种基础的控件,慎用.gxui死了,别用.linuxdeepin转QT了,所以…… windows系统最好的选择是walk. 首先,写w ...

  3. 外部盒模型大小固定 内部有边框div设置浮动时 缩放窗口内部div溢出的解决办法

    原因分析: chorme和firefox浏览器下当缩放窗口大小时,边框的计算宽度变大造成内部div宽度的计算宽度变大,外部div放不下内部div而溢出. 解决办法: 给内部div设置 box-sizi ...

  4. Java知识点-判断null、空字符串和空格

    Java知识点-判断null.空字符串和空格 // 判断headerKey是否为null,空字符串或者空格 if (headerKey != null && headerKey.len ...

  5. vue watch 监听element upload组件上传成功返回的url列表

    因为 on-success 上传成功返回的是一个异步的结果....如果父组件需要这个结果的话 必须用watch 监听 然后里面建立一个 save()方法 save方法里面再调用接口 传需要的上传之后的 ...

  6. MySQL数据类型--与MySQL零距离接触2-6数据表

    系型数据库--二维表格也就是数据表,有行和列,行称为记录,列称为字段.有数据库只是一个空架子,要存数据需要有数据表.设计数据表.  使用数据库,打开数据库: 显示当前打开的那个数据库:SELECT D ...

  7. .net委托链

    委托链可以增加方法,可以移除方法,如果是无返回值的方法,我们把它们都绑定到一个委托上面的话,直接调用,那么调用此委托就会依次调用其中的方法:但是如果是多个有返回值的委托链,如果我们不采用特殊手段,直接 ...

  8. iOS UI进阶-5.0 蓝牙/加速计/传感器

    传感器 实现代码: #import "ViewController.h" @interface ViewController () @end @implementation Vie ...

  9. 从零开始一起学习SLAM | 你好,点云

    本文提纲 先热热身点云是啥你知道点云优缺点吗?点云库PCL:开发者的福音PCL安装指北炒鸡简单的PCL实践留个作业再走先热热身 小白:hi,师兄,好久不见师兄:师妹好,上周单应矩阵作业做了吗?小白:嗯 ...

  10. cocos2d CCNode类(节点属性大全)

    1 CCNode是cocos2d-x中一个很重要的类,CCNode是场景.层.菜单.精灵等的父类.而我们在使用cocos2d-x时,接触最多的就是场景.层.菜单.精灵等.所以有必要先弄懂CCNode类 ...