脚本系列 —— 从Makefile中学习“ifneq / ifeq, filter, strip”(持续更新)

摘取一些Makefile文件里的片段,进行语法讲解

例1

ifneq "" "$(filter eng.%,$(BUILD_NUMBER))"
  # BUILD_NUMBER has a timestamp in it, which means that
  # it will change every time.  Pick a stable value.
  FILE_NAME_TAG := eng.$(USER)
else
  FILE_NAME_TAG := $(BUILD_NUMBER)
endif

上面这段语句分别用到了"ifneq",“filter”,“%”,下面详细解释一下
ifneq
条件判断语句,和ifeq相反;若后边两个对象不相等,则条件成立;
这里的两个判断对象分别是“”(空值)“$(filter eng.%,$(BUILD_NUMBER))”

filter
“$(filter eng.%,$(BUILD_NUMBER))”,这段语句的意思是从变量$(BUILD_NUMBER)中筛选出包含eng.%的部分,这其中的%是Makefile的通配符;

例如:
  $(filter eng.%,“eng.123”)的结果就是"eng.123"
  $(filter eng.,“eng.123”)的结果就是"eng."

综上分析,此例所做处理就是判断变量BUILD_NUMBER是否包含eng.,如果包含则FILE_NAME_TAG被赋值为eng.$(USER),否则被赋值为$(BUILD_NUMBER)


例2

ifneq ($(strip $(TARGET_NO_KERNEL)),true)
  INSTALLED_KERNEL_TARGET := $(PRODUCT_OUT)/kernel
else
  INSTALLED_KERNEL_TARGET :=
endif

strip
这个关键字的作用是去掉对象中开头结尾的空字符,包括空格,Tab缩进等不可见字符;

例如:
  $(strip " a bc “)的结果为"a bc”


猜你喜欢

转载自blog.csdn.net/In_engineer/article/details/125068439