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

本文深入探讨了Makefile中的四种变量赋值方式:=、:=、?=、+=的区别及应用。通过具体例程,清晰地展示了不同赋值运算符在变量定义与使用过程中的行为特性,帮助读者掌握Makefile变量管理的核心概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

在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
    

总结

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值