Android mk文件ifeq、ifneq和filter语句学习
一、ifeq 判断语句,用于比较两个参数,如果两个参数相等,则执行下面的内容。例如:
ifeq ($(strip $(TARGET_BOARD_PLATFORM_PRODUCT)), box)
LOCAL_CFLAGS += -DTARGET_BOARD_PLATFORM_PRODUCT_BOX
endif
二、ifneq 判断语句,用于比较两个参数,如果两个参数不等,则执行下面的内容。例如:
ifneq (,$(filter userdebug eng user,$(TARGET_BUILD_VARIANT)))
init_options += -DALLOW_LOCAL_PROP_OVERRIDE=1 -DALLOW_DISABLE_SELINUX=1
else
init_options += -DALLOW_LOCAL_PROP_OVERRIDE=0 -DALLOW_DISABLE_SELINUX=0
endif
三、filter 过滤语句,过滤掉不符合指定的模式的内容,仅保留符合指定的模式的内容。
sources := a b c d e f g
# 指定的模式为 a b g ,多个模式间,用空格区分
$(filter a b g , $(sources))
# 上式返回值为
# a b g
sources := a b c d e f g
# 指定的模式为 z h ,多个模式间,用空格区分
$(filter z h , $(sources))
# 上式返回值为
# null
四、ifneq + filter 应用 ifneq ($(filter A B C, $(TARGET)),),TARGET等于特定的值执行里面的内容,注意第二个参数为NULL,区分小写。
ifeq ($(strip $(RK3288_HDMI_DISPLAY)),true)
ifneq ($(filter box atv tablet, $(strip $(TARGET_BOARD_PLATFORM_PRODUCT))), )
LOCAL_CFLAGS += -DBOX_HAL
endif
endif
五、mk文件应该没有与&& 、或|| 表达式,只能用下面的语句实现与、或。
ifeq ($(strip $(TARGET_BOARD_PLATFORM_PRODUCT)),tablet)
LOCAL_CPPFLAGS += -DRK322x_MID
endif
ifneq ($(filter box atv, $(strip $(TARGET_BOARD_PLATFORM_PRODUCT))), )
LOCAL_CPPFLAGS += -DRK322x_BOX
endif
ifeq ($(strip $(TARGET_BOARD_PLATFORM_PRODUCT)),phone)
LOCAL_CPPFLAGS += -DRK322x_PHONE
endif
ifeq ($(strip $(TARGET_BOARD_PLATFORM_PRODUCT)),vr)
LOCAL_CPPFLAGS += -DRK322x_VR
endif
endif