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 ...

ifeq ($(OEM_LAYER_PATH),) LOCAL_PATH := $(abspath $(call my-dir)/../..) OEM_LAYER_PATH := $(abspath $(LOCAL_PATH)/../../../..) else LOCAL_PATH := $(OEM_LAYER_PATH)/oem/sun/multicamera/chimcxlinearmapper endif include $(CLEAR_VARS) # Module supports function call tracing via ENABLE_FUNCTION_CALL_TRACE # Required before including common.mk SUPPORT_FUNCTION_CALL_TRACE := 1 # Get definitions common to the CHI-CDK project here include $(CAMX_CHICDK_PATH)/core/build/android/common.mk MVG_SAT_NODE_PATH_ABS := $(OEM_LAYER_PATH)/oem/sun/node/oplusmvgsat/wrapper/mvgsatengine QCOM_LINEAARMAP_PATH_ABS := $(CAMX_CHICDK_PATH)/oem/qcom/multicamera/chimcxlinearmapper MVG_SAT_NODE_PATH_REL := ../../node/oplusmvgsat/wrapper/mvgsatengine LOCAL_SRC_FILES := \ mvgmcxlinearmapper.cpp \ chxzoomtranslator_proxy_mvg.cpp LOCAL_SRC_FILES += \ $(MVG_SAT_NODE_PATH_REL)/mvgsat/sdk/MvgSatEngine.cpp \ $(MVG_SAT_NODE_PATH_REL)/mvgsat/sdk/sat_cfg_load.cpp \ $(MVG_SAT_NODE_PATH_REL)/mvgcalib/sdk/src/lib_calibr.cpp LOCAL_INC_FILES += \ mvgmcxlinearmapper.h \ chimcxlinearmapperinterface.h \ chxzoomtranslator_proxy_mvg.h \ LOCAL_C_LIBS := $(CAMX_C_LIBS) LOCAL_C_INCLUDES := \ $(CAMX_C_INCLUDES) \ $(CAMX_CHICDK_PATH)/core/chifeature2 \ $(CAMX_CHICDK_PATH)/oem/qcom/feature2/chiframework \ $(CAMX_CHICDK_PATH)/oem/qcom/feature2/chiusecase \ $(CAMX_CHICDK_PATH)/oem/qcom/feature2/chiutils LOCAL_C_INCLUDES += \ $(QCOM_LINEAARMAP_PATH_ABS) LOCAL_C_INCLUDES += \ $(MVG_SAT_NODE_PATH_ABS) \ $(MVG_SAT_NODE_PATH_ABS)/mvgsat/include \ $(MVG_SAT_NODE_PATH_ABS)/mvgsat/sdk \ $(MVG_SAT_NODE_PATH_ABS)/mvgcalib/sdk/inc \ $(MVG_SAT_NODE_PATH_ABS)/mvgcalib/sdk/src \ $(MVG_SAT_NODE_PATH_ABS)/rapidjson/include # Compiler flags LOCAL_CFLAGS := $(CAMX_CFLAGS) LOCAL_CPPFLAGS := $(CAMX_CPPFLAGS) LOCAL_CPPFLAGS += \ -DUSING_ARCSODT_ZOOM_CTRL \ -DUSING_MVGSAT_ZOOM_CTRL # CamX Stripout Flags LOCAL_CFLAGS := $(filter-out $(CAMXSTRIPOUT),$(LOCAL_CFLAGS)) LOCAL_CFLAGS += -Wno-error LOCAL_SHARED_LIBRARIES += \ com.qti.chi.override \ libcamera_metadata \ libchilog \ libcutils \ libhardware \ libhidlbase \ libhidltransport \ liblog \ libsync \ libutils \ libextensionlayer \ libhwconfigurationutil \ # Binary name LOCAL_MODULE := com.oplus.mcx.linearmapper LOCAL_MULTILIB := first LOCAL_LDLIBS := -lz LOCAL_MODULE_PATH_64 := $(TARGET_OUT_ODM)/lib64 include $(CHICDK_BUILD_SHARED_LIBRARY) -include $(CAMX_CHECK_WHINER)
最新发布
07-23
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

阿迷创客

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

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

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

打赏作者

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

抵扣说明:

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

余额充值