Android.mk(makefile)中几个符号的区别:=、 :=、 ?=、 +=

一、篇头

  • Android.mk也是需要通过make程序去解释执行,语法同Makefile文件
  • Andorid AOSP代码中,依旧还有大量地方在使用mk文件,今日遇上,概念混淆,记录一下

二、结论

 = 是最基本的赋值,左边变量赋予右边的值,直接覆盖
:= 是覆盖之前的值,不论是用什么符号赋的值
?= 是如果没有被赋值过就赋予等号后面的值,如果之前有赋值,就跳过
+= 是添加等号后面的值,这个比较常用,追加值和属性

三、实验 1

3.1 makefile

  • 新建一个makefile文件,填入如下内容
#1. 如果定义了DEFINE_VRE=true
ifdef DEFINE_VRE
    VRE = “Hello World!else
#如果没有定义DEFINE_VRE,则什么也不做
endif

#2. 如果OPT变量等于“define”
ifeq ($(OPT),define)
    VRE ?= “Hello World! First!”
endif

#3. 如果OPT变量等于“add”
ifeq ($(OPT),add)
    VRE += “Kelly!”
endif

#4. 如果OPT变量等于“recover”
ifeq ($(OPT),recover)
    VRE := “Hello World! Again!”
endif

#5. 打印 $(VRE) 的值”
all:
    @echo $(VRE)

3.2 执行结果

敲入以下make命令:
make DEFINE_VRE=true OPT=define 输出:Hello World!
解释:走了1,2,5的流程,第2项使用的是 ?=, 因DEFINE_VRE已经被定义赋值过,所以值不变,还是1的VRE = “Hello World!make DEFINE_VRE=true OPT=add 输出:Hello World! Kelly!
解释:走了1,3,5的流程,第3项使用的是 += , 所以在第1项目的基础上,加入了字符串 “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!

四、实验 2

4.1 Android.mk

• 例子:给$PARTITION_FILE_LIST追加值

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := Reserve0.img
LOCAL_MODULE_CLASS:= ETC
LOCAL_MODULE_PATH := $(PRODUCT_OUT)

PARTITION_SIZE_M := 16
PARTITION_FILE_LIST ?= \
	vendor/aw/homlet/tvsystem/tvserver/1.0/default/configs/panel_config/panel_config.ini

PARTITION_FILE_LIST += $(LOCAL_PATH)/advert.bmp

$(info 11111111111111111111111111111111111111111111111111111)
$(info $(PARTITION_FILE_LIST))
$(info 22222222222222222222222222222222222222222222222222222)

GEN := $(local-generated-sources-dir)/$(LOCAL_MODULE)

$(GEN): $(LOCAL_PATH)/gen.sh $(PARTITION_FILE_LIST)
	$< $@ $(PARTITION_SIZE_M) "$(PARTITION_FILE_LIST)"

LOCAL_PREBUILT_MODULE_FILE := $(GEN)

include $(BUILD_PREBUILT)

4.2 执行结果

============================================
device/softwinner/ares/Reserve0/Android.mk was modified, regenerating...
[ 10% 28/258] including device/softwinner/ares/Reserve0/Android.mk ...
11111111111111111111111111111111111111111111111111111
device/softwinner/ares/h713-tuna_perf1/panel_config/panel_config.ini device/softwinner/ares/Reserve0/advert.bmp
22222222222222222222222222222222222222222222222222222
[ 12% 31/258] including device/softwinner/common/config/wireless/Android.mk ...

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Makefile,=是最普通的等号赋值符号,它的作用是将右侧的值赋给左侧的变量。例如,变量A=1,表示将1赋值给变量A。 ?=是条件赋值符号,它的作用是只有在变量未定义时才进行赋值。例如,如果变量A未定义,A?=1,那么A的值就是1;如果A已经定义了,那么A?=1就不会起作用,A的值保持不变。 :=是简单赋值符号,它的特点是变量的值决定于它在Makefile的位置,而不是整个Makefile展开后的最终值。这意味着,如果在使用:=进行赋值时,变量的右侧包含了其他变量的引用,那么这些变量的值将在赋值时被解析并赋给左侧的变量。 总结一下: - =是最普通的等号赋值符号,将右侧的值赋给左侧的变量。 - ?=是条件赋值符号,只有在变量未定义时才进行赋值。 - :=是简单赋值符号,变量的值决定于它在Makefile的位置,而不是整个Makefile展开后的最终值。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Makefile := ?= += =的区别](https://blog.csdn.net/chenzhen1080/article/details/107135390)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [Makefile = := ?= += 的使用及区别](https://blog.csdn.net/shenfengchen/article/details/110792431)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿迷创客

感谢!您的支持是我写作的动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值