MAKEFILE【1】-Makefile 中:= ?= += =的区别

2023-10-31


前言

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


一、例程

新建一个Makefile,内容为

ifdef DEFINE_VRE
	VRE = "Hello World!"
else
endif

ifeq ($(OPT),define)
	VER ?= "Hello World! First!"
endif

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

ifeq ($(OPT),recover)
	VER := "Hello World! Again!"
endif

all:
	@echo $(VRE)
	

运行结果

$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 Woeld! First
$make DEFINE_VRE= OPT=add
--->Kelly
$make DEFINE_VRE= OPT=recover
--->Hello World! Again!

二、=:=的区别

  1. =
    make会将makfile展开之后再决定变量的值,也就是说,变量的值将会是整个makefile中最终的值

    x = foo
    y = $(x) bar
    x = xyz
    
    在上例中,y的值是xyz bar,而不是foo bar
    
  2. :=
    :=表示变量的值取决于变量的位置,而不是整个makefile 展开后的最终值

    x := foo
    y := $(x) bar
    x = xyz
    
    在上例中,y的值会是foo bar,而不是 xyz bar
    

总结

从上面的结果中可以看出:

= 是基本的赋值
:= 是覆盖之前的赋值
?=是如果之前没有赋值就赋予等号后面的值
+=是添加后面的值

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MAKEFILE【1】-Makefile 中:= ?= += =的区别 的相关文章

随机推荐

  • BUUCTF [ACTF2020 新生赛] Exec

    BUUCTF ACTF2020 新生赛 Exec 启动靶机 打开环境 页面可以执行Ping命令 判断应为命令执行漏洞 尝试输入正常IP127 0 0 1查看其回显 127 0 0 1 其为正常回显 测试管道连接符 是否能用 127 0 0
  • springboot静态资源存放路径解析

    1 源码分析 public void addResourceHandlers ResourceHandlerRegistry registry 1 如果静态资源已经被自定义了 则禁用默认资源处理 if this resourceProper
  • 词语提取小工具开放啦

    推荐一个词语提取小工具给大家使用 免费的 华为云的云搜索服务 可以自定义自己的词库来做分词 停词 修改词库还可以热更新 不用重启即可生效 大家都知道词库中的词从哪里来 哪些才是有用的词 这是让人头疼的事情 每天苦读海量文章 也才能从中找出几
  • Android 7.0 网络变化监听

    一般监听网络变化是在 AndroidManifest 中注册 BroadcastReceiver 来实现 targetSdkVersion 升级到 24 后 发现静态注册广播的方式要被取消了 Declaring a broadcastrec
  • 【SQL】15 SQL 约束(Constraints)、NOT NULL 约束、UNIQUE 约束、PRIMARY KEY 约束、FOREIGN KEY 约束、CHECK 约束、DEFAULT约束

    SQL 约束 Constraints SQL 约束用于规定表中的数据规则 如果存在违反约束的数据行为 行为会被约束终止 约束可以在创建表时规定 通过 CREATE TABLE 语句 或者在表创建之后规定 通过 ALTER TABLE 语句
  • 文献阅读:Chain-of-Thought Prompting Elicits Reasoning in Large Language Models

    文献阅读 Chain of Thought Prompting Elicits Reasoning in Large Language Models 1 文章简介 2 具体方法 3 实验结果 1 数学推理 1 实验设计 2 实验结果 3 消
  • 如何配置Binlog

    binlog日志有两个最重要的使用场景 1 MySQL主从复制 MySQL Replication在Master端开启binlog Master把它的二进制日志传递给slaves来达到 master slave数据一致的目的 2 自然就是数
  • VUE项目打包成apk

    在我们的开发需求中 可能会遇到需要将vue项目中的H5代码打包成一个安卓的app 那么我为大家介绍一套保姆级的解决方案 看完你就会 VUE HBuilder 1 准备工作 需要下载一个HBuilder X编辑器 不过我相信大家身为前端开发工
  • 算法设计技巧与分析(期末复习)

    查找 二分查找 include
  • 关于图像傅里叶变换得到的频谱图的通俗理解

    傅里叶变换过程 经过傅里叶变化且频谱居中化处理的频谱图 1 如果将图像某一行上的灰度变化看作是一个离散信号 那么整张图像可以看作是一个分布在二维平面上的信号 因此图像可看作是空间域信号 傅里叶变换则是将图像灰度分布 空间域信号 变换到了频域
  • vue v-for动态渲染本地图片

    记录 多张本地图片使用v for渲染时引入路径需添加 require
  • 移动端的h5可配置表头的复杂表格

    最近做移动端的h5项目 要做一个可配置表头的复杂表格 网上找了很久也没什么好方法 结合网上的一些例子 在此做一了一个完整的vue版的例子 效果图 1 引入 iscroll npm i iscroll save 2 对插件再做一层封装 封装成
  • PPTP模式跟L2TP模式有什么不同

    使用VPN的时候经常会看到商家说支持PPTP模式和L2TP模式 但是许多朋友都不知道有什么区别 该用哪一个 下面给你们讲讲 1 PPTP协议是点对点隧道协议 其将控制包与数据包分开 控制包采用TCP控制 用于严格的状态查询及信令信息 数据包
  • cryptography

    出现这个错误是因为缺少cryptography包 可以使用 pip install cryptography 安装cryptography包 如果安装cryptography失败 先检查一下自己的pip包是否为最新版本 在settings
  • CSS 实现input自定义样式--文本框

    边框 设置边框颜色
  • 2023最新版本Activiti7系列-事件篇

    事件篇 事件 event 通常用于为流程生命周期中发生的事情建模 事件总是图形化为圆圈 在BPMN 2 0中 有两种主要的事件分类 捕获 catching 与抛出 throwing 事件 捕获 当流程执行到达这个事件时 会等待直到触发器动作
  • 【一 DE1-SOC】quartus II下载程序步骤

    最近的开发都是使用vivado 想把某个工程迁移到DE1 SOC中 由于许久不使用qaurtus了 生疏了 下载程序老是失败 记录以一下载的步骤 开发板 DE1 SOC 芯片型号 5CSEMA5F31C6N 1 首先编写程序并编译成功 编译
  • 用typedef定义结构体

    typedef struct XXXXXXXXXXXX include
  • python小游戏毕设 推箱子小游戏设计与实现 (源码)

    文章目录 0 项目简介 1 游戏介绍 2 实现效果 3 开发工具 3 1 环境配置 3 2 Pygame介绍 4 具体实现 5 最后 0 项目简介 Hi 各位同学好呀 这里是L学长 今天向大家分享一个今年 2022 最新完成的毕业设计项目作
  • MAKEFILE【1】-Makefile 中:= ?= += =的区别

    文章目录 前言 一 例程 二 和 的区别 总结 前言 在Makefile中我们经常看到 这几个赋值运算符 那么他们有什么区别呢 实验如下 一 例程 新建一个Makefile 内容为 ifdef DEFINE VRE VRE Hello Wo