Makefile 中:= ?= += =的区别(摘自https://www.cnblogs.com/wanqieddy/archive/2011/09/21/2184257.html)

在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 了。

编译安卓的一些知识点相关推荐

  1. 解释型语言与编译型的必须知识点

    解释型语言与编译型的必须知识点 概念: 计算机不能理解直接理解高级语言,只能理解机器语言,所以必须把高级语言翻译成机器语言,计算机才能执行高级语言编写的程序. 翻译的方式有两种: 编译 解释 两种翻译 ...

  2. mac下编译安卓源码

    资源 Mac OS10.12 编译Android源码8.1 aosp编译-需翻墙 Mac下编译安卓源码 手把手教你在Mac OS下载.编译及导入Android源码 步骤 准备 磁盘空间大于180G 安 ...

  3. 关于编译安卓kernel出现“make[1]:***[init/main.o] error 1”的解决办法

    编译安卓内核的时候,出现这个错误,花了好长时间才找到答案. 执行 sudo dpkg-reconfigure dash 选择no,然后继续编译就不会出现错误了.

  4. Ubuntu 18.04安装openJDK7编译安卓6.0.0_r1

    最近在使用AOSP编译安卓6.0.0_r1源码,自己的机器是Ubuntu18.04 TLS,试了网上所有安装openjdk7的教程发现没有一个可以使用的,实属无奈只能自己动手解决这个问题完成了编译,教 ...

  5. 编译安卓系统源码jack-server问题入坑,全网最全解决方法

    编译安卓系统源码jack-server入坑,全网最全解决方法 1.权限问题 2.端口占用 3.删除 TLSv1, TLSv1.1(我的最后解决办法) 1.权限问题 运行失败时进入~/.jack-ser ...

  6. uniapp-条件编译安卓Android/苹果iOS

    uniapp-条件编译安卓Android/苹果iOS //在全局common.js定义 module.exports = {is_iOS: function() {if (uni.getSystemI ...

  7. 高通sdm660平台编译安卓10

    编译安卓10源码 在源码根目录执行 环境初始化 source build/envsetup.sh 可以使用lunch,查看当前有哪些板级编译选项 lunch 完整编译 ./build.sh dist ...

  8. 从零开始编译安卓系统源码(生成.img文件)以及安卓系统内核

    最近开始接触安卓设备,了解到安卓系统开机界面以及定制桌面需要修改系统源码,这种情况下就需要重新编译系统源码得到.img镜像文件,本篇文章记录从零开始编译安卓系统源码以及安卓系统内核的一种方式. 很感谢 ...

  9. React Native系列(6) - 编译安卓私有React-Native代码

    为何要自己编译React Native安卓私有代码 我们在开发中遇到一个HTTP2的问题,React Native安卓客户端在和HTTP2支持的服务器通讯的过程中会有crash,见 React-Nat ...

最新文章

  1. HM16.0之帧间预测——xCheckRDCostInter()函数
  2. python gil_Python GIL(Global Interpreter Lock)
  3. opc服务器消息通知代码,OPCClient浏览OPCServer的简单实例程序源代码.doc
  4. jQuery获取cookie
  5. (转)Bootstrap 之 Metronic 模板的学习之路 - (3)源码分析之 body 部分
  6. 全新设计的 Xcode 12
  7. 用户扫描二维码进入公众号后自动发送指定消息_wetool的封杀、企业微信的崛起,我们要怎么利用企业微信进行用户增长?...
  8. C++基础::文件流(二)
  9. java常见基础面试题
  10. 趋势防毒officescan问题心得
  11. 数据库系统概论第五版(王珊)-基础篇(一)
  12. win10系统Qt配置海康HCSadpSDK局域网设备搜索
  13. 在线CUR格式转换器
  14. JSP学习笔记(八):使用ArrayList
  15. 抖音发广告需要注意什么,三个注意事项与规范要牢记
  16. Windows操作系统安全加固基线检测脚本
  17. 夕阳西下,天空燃烧着一片橘红色的晚霞
  18. Spring高手之路——深入理解与实现IOC依赖查找与依赖注入
  19. 四轴飞行前检查及解锁
  20. unity wsad 鼠标_Unity键盘WASD实现物体移动|chu

热门文章

  1. php常用操作数组函数,PHP常见数组函数用法小结
  2. linux stop函数,perfmonctl()函数 Unix/Linux
  3. 4x4矩阵键盘工作原理及扫描程序_AVR单片机扫描4X4矩阵键盘并数码管显示程序
  4. 苹果6s怎么连不上服务器未响应,iphone6s无法连接app store 苹果6s连不上app store解决方法...
  5. apollo集群部署_ribbon+apollo实现灰度发布
  6. 四十二、ETL工具Kettle的转换步骤
  7. 漫画 | 公司测试因提Bug不规范,锒铛入狱~
  8. 这届产品经理也太太太太难了吧!
  9. 学霸大佬整理,超全 Python 学习路线图(附工具+视频+书籍+面试)
  10. mysql 中文字段名_10个MySQL的数据库技巧~