from :http://www.cnblogs.com/wanqieddy/archive/2011/09/21/2184257.html

Makefile 中:= ?= += =的区别

在Makefile中我们经常看到 = := ?= +=这几个赋值运算符,那么他们有什么区别呢?我们来做个简单的实验

新建一个Makefile,内容为:
ifdef DEFINE_VRE
    VRE = “Hello World!”
else
endif

ifeq ($(OPT),define)
    VRE ?= “Hello World! First!”
endif

ifeq ($(OPT),add)
    VRE += “Kelly!”
endif

ifeq ($(OPT),recover)
    VRE := “Hello World! Again!”
endif

all:
    @echo $(VRE)

敲入以下make命令:
make DEFINE_VRE=true OPT=define 输出:Hello World!
make DEFINE_VRE=true OPT=add 输出:Hello World! Kelly!
make DEFINE_VRE=true OPT=recover  输出:Hello World! Again!
make DEFINE_VRE= OPT=define 输出:Hello World! First!
make DEFINE_VRE= OPT=add 输出:Kelly!
make DEFINE_VRE= OPT=recover 输出:Hello World! Again!

从上面的结果中我们可以清楚的看到他们的区别了
= 是最基本的赋值
:= 是覆盖之前的值
?= 是如果没有被赋值过就赋予等号后面的值
+= 是添加等号后面的值

之前一直纠结makefile中“=”和“:=”的区别到底有什么区别,因为给变量赋值时,两个符号都在使用。网上搜了一下,有人给出了解答,但是本人愚钝,看不懂什么意思。几寻无果之下,也就放下了。今天看一篇博客,无意中发现作者对于这个问题做了很好的解答。解决问题之余不免感叹,有时候给个例子不就清楚了吗?为什么非要说得那么学术呢。^_^

1、“=”

make会将整个makefile展开后,再决定变量的值。也就是说,变量的值将会是整个makefile中最后被指定的值。看例子:

x = foo
            y = $(x) bar
            x = xyz

在上例中,y的值将会是 xyz bar ,而不是 foo bar 。

2、“:=”

“:=”表示变量的值决定于它在makefile中的位置,而不是整个makefile展开后的最终值。

x := foo
            y := $(x) bar
            x := xyz

在上例中,y的值将会是 foo bar ,而不是 xyz bar 了。

Makefile 中:= ?= += =的区别相关推荐

  1. makefile 中 =, :=, ?=, +=的区别

    在Makefile中我们经常看到 = := ?= +=这几个赋值运算符,那么他们有什么区别呢?我们来做个简单的实验 新建一个Makefile,内容为: ifdef DEFINE_VRE     VRE ...

  2. makefile中 = ,:=,+=有怎么区别?

    = 是最基本的赋值 := 是覆盖之前的值 ?= 是如果没有被赋值过就赋予等号后面的值 += 是添加等号后面的值 1."=" make会将整个makefile展开后,再决定变量的值. ...

  3. 【Linux + Makefile】Makefile中的.PHONY作用以及赋值运算(各种=符号)的区别

    笔者常年在Linux环境编程,经常在项目中与Makefile打交道,最近总结了几个Makefile的小的知识点,分享给大家. 通过阅读本文,你将了解到以下知识: 1.Makefilke中的.PHONY ...

  4. Android Makefile中inherit-product函数简介,以及与include的区别

    在 Android Makefile 中时不时会看见 inherit-product 函数的使用,类似下方这样:         $(call  inherit-product,  vendor/do ...

  5. Makefile中指示符“include”、“-include”和“sinclude”的区别

    指示符"include"."-include"和"sinclude" 如果指示符"include"指定的文件不是以斜线开 ...

  6. Android Makefile中inherit-product函数和include的区别

    在 Android Makefile中inherit-product函数和include都是执行某个文件. include 使用: include device/mediatek/mt2712/dev ...

  7. makefile中变量有哪些?

    make一些参数选项: -p 选项,可以打印出make过程中的数据库, 下面研究一下内置的变量和规则. -n 选项, 只运行,不执行, -d 选项,相当于–debug=a,b(basic),v(ver ...

  8. Linux Makefile 中的陷阱【转】

    转自:https://blog.csdn.net/QQ1452008/article/details/52247944 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog. ...

  9. 简单聊一下makefile中的 =, :=, ?=和+=

    最容易混淆的是 =和:=, 我们先来看看makefile: [plain] view plaincopy x = hello y = $(x) x = world test1: test1.cpp @ ...

最新文章

  1. android自定义文件选择,关于安卓自定义本地文件选择库的实现
  2. MySQL优化篇:show profile进行SQL分析
  3. 如何知道一个网络中每个权重的重要性
  4. kaggle比赛模型融合指南
  5. pythonsubprocess执行多条shell命令_python中subprocess批量执行linux命令
  6. 大学考试分数越高学分越多吗_大学的绩点和学分有什么用?影响学生毕业吗
  7. rem是怎么计算的(转载)
  8. Velo 实验室集成 Chainlink 预言机喂价
  9. pyspider 数据存储到mongoDB中
  10. UNIX网络编程——shutdown 与 close 函数 的区别
  11. Linux基础_合并,归档,压缩,dump,编辑器
  12. 万能python,画个滑稽来玩玩
  13. 永中文档在线预览集群部署方案
  14. Java验证身份证号
  15. Java工程师成神之路 | 2020正式版
  16. python量化投资系统构建_零基础搭建量化投资系统 以Python为工具
  17. 行列式的拉普拉斯展开定理_如何证明行列式的拉普拉斯定理?
  18. 思考(七十四):一个游戏后端分布式事务架构介绍
  19. 简单了解实体框架EF(Entity Framework)
  20. ClockGen,旧电脑的超频利器

热门文章

  1. httpclient3.1的多线程处理
  2. libpcap介绍(一)
  3. DPDK加速I/O虚拟化
  4. 云计算三层架构_金山云发布星曜裸金属服务器 打造面向云计算2.0的云基础架构...
  5. 写给初学大数据的你,从零开始学习大数据开发的完整学习路线
  6. idea没有错误出现红色波浪线怎么去掉?
  7. H5移动端网页标签模板
  8. 使用Powershell 来创建新邮箱帐号
  9. 项目发布错误的解决方法
  10. 【转载】Python 深入浅出支持向量机(SVM)算法