Makefile中的赋值符号:=、:=、?=、+=

参考博客: Makefile赋值符号的使用——"=" ":=" "?=" "+="_秦伟H的博客-CSDN博客

1、“=”,是最基本的赋值

make将整个Makefile展开后再决定变量的值,变量的值等于Makefile中最后给这个变量所指定的值(换言之,只看最后的赋值)。

比如下面例子中,y的值将会是“xyz bar”,而不是“foo bar”。

root@ubuntu:/home/xjh/iot/embedded_basic_course/kernel/jiuding_kernel# cat Makefile
x = foo
y = $(x) bar
x = xyz  #x的值最后是xyz,所以y=xyz bar
all:@echo 'x='$(x)@echo 'y='$(y)root@ubuntu:/home/xjh/iot/embedded_basic_course/kernel/jiuding_kernel# make
x=xyz
y=xyz bar
root@ubuntu:/home/xjh/iot/embedded_basic_course/kernel/jiuding_kernel# 

2、“:=”,表示覆盖之前的值而进行赋值

另外,变量的值决定于它在makefile中的位置,而不是整个makefile展开后的最终值。

那么下面例子中,y的值将会是“foo bar”,而不是“xyz bar”。打脸啊!!!!

root@ubuntu:/home/xjh/iot/embedded_basic_course/kernel/jiuding_kernel# cat Makefile
x = foo
y = $(x) bar
x := xyzall:@echo 'x='$(x) #x=xyz@echo 'y='$(y) #y=foo barroot@ubuntu:/home/xjh/iot/embedded_basic_course/kernel/jiuding_kernel# make
x=xyz
y=xyz bar
root@ubuntu:/home/xjh/iot/embedded_basic_course/kernel/jiuding_kernel# 

3、“?=”,表示如果没有被赋值,则赋予等号后面的值

比如代码中如果有“x=”这样的语句,即“=”后面什么也没有,它的意思为“x的值未定义”或者“x没有被赋值”,此时“?=”的赋值操作才会生效。如果“=”后面已经赋值,那这个“?=”的赋值操作就不生效。

root@ubuntu:/home/xjh/iot/embedded_basic_course/kernel/jiuding_kernel# cat Makefile
x = foo
x ?= abcd
all:@echo $(x)
#x最后等于foo,因为?=表示没有赋值则进行赋值,现在已经赋值了,所以不再赋值
root@ubuntu:/home/xjh/iot/embedded_basic_course/kernel/jiuding_kernel# make
foo
root@ubuntu:/home/xjh/iot/embedded_basic_course/kernel/jiuding_kernel# cat Makefile
#x =
x ?= abcd
all:@echo $(x)
#x最后等于abcd,因为?=表示没有赋值则进行赋值,现在没有赋值所以赋值
root@ubuntu:/home/xjh/iot/embedded_basic_course/kernel/jiuding_kernel# make
abcd
root@ubuntu:/home/xjh/iot/embedded_basic_course/kernel/jiuding_kernel# 
root@ubuntu:/home/xjh/iot/embedded_basic_course/kernel/jiuding_kernel# cat Makefile
x =
x ?= abcd
all:@echo $(x)
root@ubuntu:/home/xjh/iot/embedded_basic_course/kernel/jiuding_kernel# makeroot@ubuntu:/home/xjh/iot/embedded_basic_course/kernel/jiuding_kernel# 

4、“+=”,表示添加等号后面的值

这有点像字符串的拼接,追加的和原来的有一个空格?(不是因为我输入=左右的缘故)

root@ubuntu:/home/xjh/iot/embedded_basic_course/kernel/jiuding_kernel# cat Makefile
x = foo
y = bar
x += $(y) all:@echo $(x)  #注意这里的“空格”是tab而非空格。另外添加@表示不显示“echo”这个字样#x最后的值为“foo bar”root@ubuntu:/home/xjh/iot/embedded_basic_course/kernel/jiuding_kernel# make
foo bar
root@ubuntu:/home/xjh/iot/embedded_basic_course/kernel/jiuding_kernel# 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/461216.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

fck java_FCkjava三种调用方法

测试FCK方法一:toolbarSet "Default" >默认内容测试方法二:FCKeditor oFCKeditor ;oFCKeditor new FCKeditor(request,"content") ;oFCKeditor.setBasePath( "/db/fckeditor/" ) ;oFCKeditor.setWidth("600");oFCKeditor.setHeig…

Spring 容器(Spring 的上下文)

为什么80%的码农都做不了架构师&#xff1f;>>> 最近在做项目时牵扯到有关父子上下文的概念。 何为父子上下文呢&#xff1f; 父上下文&#xff1a; 使用listener监听器来加载配置文件&#xff0c;如下&#xff1a; <listener> <listener-class>org.…

file_operations结构体

以下读书笔记内容摘自宋宝华《Linux设备驱动开发详解》一书。 file_operations结构体在字符设备驱动的地位 file_operations结构体的定义 此结构体定义在x210kernel/include/linux/fs.h文件中。 struct file_operations {struct module *owner;loff_t (*llseek) (struct file …

FlashCC学习札记

前段时间项目中有一个功能模块用到了FlashCC&#xff0c;将C的代码编译成swc文件&#xff0c;以便在Flash工程中使用。开发过程中遇到一些问题&#xff0c;现在记录下来&#xff0c;以便日后查阅。 一、开发环境搭建 说明:本文所使用的FlashCC版本为1.0.1&#xff0c; 操作系统…

Java制作报表系统流程_基于JAVA报表生成系统设计与实现.doc

基于JAVA报表生成系统设计与实现摘 要现在是信息社会&#xff0c;各种信息都需要处理并直观展现&#xff0c;如股票&#xff0c;物价等信息都需要通过数据报表来展现、分析&#xff0c;因此高质量报表软件系统具有重要的实际意义。本论文课题研究探索了报表系统的开发方法与技术…

”凉凉“ 的故事

某一天&#xff0c;我在给数据匹配编码的时候发现一个数据匹配不到编码&#xff0c;我怀疑是码表问题&#xff0c;终于发现一个非常奇妙的事情&#xff1a;两个一模一样的字符串竟然不相等&#xff1f;&#xff1f;&#xff1f; 屌爆了&#xff0c;我上下左右看遍了也没看出这2…

struct file 结构体

该结构体在x210kernel/include/linux/fs.h文件中定义。 struct file {/** fu_list becomes invalid after file_free is called and queued via* fu_rcuhead for RCU freeing*/union {struct list_head fu_list;struct rcu_head fu_rcuhead;} f_u;struct path f_path; #def…

左右替换循环

$i1; while($i<5){$i;if(($i%2)0){echo 文字在左&#xff0c;<img src"img/logo_sports.png"><br /><br />;}else{echo <img src"logo_sports.png">&#xff0c;文字在右<br /><br />;} } 转载于:https://www.cnbl…

面向对象理论概述

2019独角兽企业重金招聘Python工程师标准>>> 转载自&#xff1a;http://my.oschina.net/brucelee80/blog 面向对象与面向过程的区别 面向过程就是分析出解决问题所需要的步骤&#xff0c;然后用函数把这些步骤一步一步实现&#xff0c;使用的时候一个一个依次调用就…

网络设备驱动介绍

以下内容源于朱有鹏《物联网大讲堂》课程的学习&#xff0c;如有侵权&#xff0c;请告知删除。 一、网络设备驱动概述 1、什么是网络设备 &#xff08;1&#xff09;网络设备&#xff1a;物理网卡在linux中形成的体系软件表现。 &#xff08;2&#xff09;物理网卡&#xff…

HTML之二:body标记的属性及属性值

HTML之二&#xff1a;body标记的属性及属性值在HTML之一中&#xff0c;介绍了必须要写入的结构、title用于显示标题栏的内容、网页的内容大部分在body中编辑&#xff0c;下面简单介绍body常用的属性以及属性值。<body background"图片位置" #设置背…

山东理工ACM【2561】九九乘法表

九九乘法表 Time Limit: 1000ms Memory limit: 65536K 有疑问&#xff1f;点这里^_^ 题目描述 九九乘法表是数学学习的基础&#xff0c;今天我们就来看看乘法表的相关问题。《九九乘法歌诀》&#xff0c;又常称为“小九九”,如下图所示。你的任务是写一个程序&#xff0c;对…

java ajax 定时刷新_用ajax技术实现无闪烁定时刷新页面

function makeRequest() {var guid rnd();//记住给个随机数&#xff0c;不然的话有缓存var url "example_b.aspx?id" guid;createXMLHttpRequest();xmlHttp.onreadystatechange handleRefresh;xmlHttp.open("GET", url, false);xmlHttp.send(null);}/…

platform驱动开发套路、DM9000的一些分析

1、 模块加载函数&#xff0c;是通过platform_driver_register()、platfprm_driver_unregister函数进行platform_driver的注册和注销&#xff1b; 原先注册和注销字符设备的工作&#xff0c;被移交给platform_driver的probe()成员函数和remove()成员函数中。 第一句是将硬件信…

效果历史

现代文艺解释学和接受美学术语。德国哲学家伽达默尔认为&#xff0c;历史决不重复过去的东西&#xff0c;它是可能性与现实性、过去与现在的统一。解释者在效果历史的环境下发现自己所处的“情境”&#xff0c;他必须在此情境中借助他从传统中承袭来的偏见来理解传统。姚斯发展…

Java对数组的操作(二)——集合与数组的切换

在Java开发中经常遇见集合与数组的互相切换&#xff0c;怎样实现呢&#xff0c;呵呵呵&#xff0c;非常easy&#xff1a; import java.util.ArrayList; import java.util.Arrays;import java.util.HashSet;import java.util.List;import java.util.Set;public class Te…

java 项目中遇到的问题 和解决方案_Java开发遇到的问题及解决方案

一、java.lang.OutOfMemoryError 问题:myeclipse 内存不足,又显示内存溢出等问题怎么回事?(java.lang.OutOfMemoryError: PermGen space及其解决方法) 解决: myeclipse内存溢出之后,可以通过修改虚拟内存大小来解决,步骤如下: 1、设置Default VM Arguments 在myEclipse中…

Android企业级程序完全退出的解决方案

一、问题描述 在平常开发的过程中可以发现&#xff0c;很多开发者对于程序的退出都没有去认真的解决。一般要么是一个简单的finish&#xff08;只是退出当前的activity&#xff09;&#xff0c;要么是其他的方法&#xff0c;比如&#xff1a; 1、第一种方法&#xff1a;首先获取…

块设备驱动介绍

以下内容源于朱有鹏《物联网大讲堂》课程的学习&#xff0c;如有侵权&#xff0c;请告知删除。 一、正确理解块设备驱动的概念 1、块设备和字符设备的差异 块和字符是两种不同的访问设备的策略&#xff1b;同一个设备可以同时支持块和字符两种访问策略&#xff1b;设备本身的物…

Centos 统计文件夹下文件和文件夹的个数

运营管理中经常会碰到关于文件统计的需求&#xff0c;近期在做系统迁移&#xff0c;正好做个备忘。关键词&#xff1a;d : directory- : 一般文件以下命令在需要统计的目录下进行&#xff0c;如&#xff1a;# cd 目标文件夹统计某文件夹下文件的个数# ls -l |grep "^-&…