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

本文详细解读了Makefile中的ifneq条件判断和filter函数使用实例,展示了如何通过这两个功能判断变量是否包含特定模式,并根据结果设置变量值。理解这些技巧有助于编写高效和灵活的Makefile脚本。

摘取一些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”


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

星际工程师

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值