欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > Android.mk(makefile)中几个符号的区别:=、 :=、 ?=、 +=

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

2025/9/29 23:48:14 来源:https://blog.csdn.net/yyzsyx/article/details/139767679  浏览:    关键词:Android.mk(makefile)中几个符号的区别:=、 :=、 ?=、 +=

一、篇头

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

二、结论

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

三、实验 1

3.1 makefile

  • 新建一个makefile文件,填入如下内容
#1. 如果定义了DEFINE_VRE=true
ifdef DEFINE_VREVRE = “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.iniPARTITION_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 ...

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词