news 2026/7/24 15:30:37

【Makefile 专家之路 | 逻辑篇】07. 逻辑之光:条件判断(ifeq/ifdef)在多环境下的应用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Makefile 专家之路 | 逻辑篇】07. 逻辑之光:条件判断(ifeq/ifdef)在多环境下的应用

文章目录

  • 一、 条件判断的本质:预处理
  • 二、四大判断金刚
  • 三、 语法细节(最容易报错的地方)
  • 四、 💡 安卓工程师的实战案例:多架构适配
  • 五、 💡 安卓工程师的记忆卡片

一、 条件判断的本质:预处理

一定要记住:Makefile 的条件判断是在make解析(读取)文件阶段执行的,而不是在命令执行阶段。

  • 这意味着你不能在命令(Tab 开头的行)里直接写ifeq
  • 它的作用是决定“哪些代码块”会被make纳入执行计划。

二、四大判断金刚

指令逻辑实战场景
ifeq (a, b)如果 a 等于 b判断TARGET_PRODUCT是否为某个特定机型
ifneq (a, b)如果 a 不等于 b排除掉某些不支持的硬件模块
ifdef var如果变量var值非空检查用户是否在命令行传了DEBUG=1
ifndef var如果变量var值为空设置默认路径或默认开关

三、 语法细节(最容易报错的地方)

  1. 参数的括号ifeq后面可以加括号(a, b),也可以用引号"a" "b"。Android 源码中为了清晰,通常使用括号。

  2. 空格的尊严ifeq与左括号之间必须有一个空格

    • ifeq(A,B)-> 报错
    • ifeq (A, B)-> 正确
  3. 注意缩进if的内容体可以缩进也可以不缩进。如果选择缩进美观代码,千万不要用Tab键开头缩进,否则会被Makefile误解为命令。可以选择使用两个空格或四个空格缩进

  4. 结束标志: 每一个判断块必须以endif结尾。

四、 💡 安卓工程师的实战案例:多架构适配

Android.mk中,你经常会看到这种根据架构分配不同 CFLAGS 的逻辑:

# 根据 Android 目标架构选择编译优化ifeq($(TARGET_ARCH), arm64)LOCAL_CFLAGS+=-DARM64_OPTIMIZATIONelseifeq($(TARGET_ARCH), x86_64)LOCAL_CFLAGS+=-DX86_64_STABILITYelseLOCAL_CFLAGS+=-DGENERIC_ARCHendif

进阶技巧:嵌套判断
你可以像写 C 语言一样嵌套判断,比如先判断是不是arm64,再判断是不是userdebug版本,从而开启更深层的日志。

五、 💡 安卓工程师的记忆卡片

  1. ifdef的陷阱
    ifdef只是测试变量是否有值。如果你定义了DEBUG =(后面是空的),那么ifdef DEBUG会被判定为
  2. 不要在命令块里写判断
    如果你想在 Shell 命令里做判断,请使用 Shell 的if [ ... ]; then ... fi语法。
    • Makefile 判断: 控制 Makefile 规则的生成。
    • Shell 判断: 控制命令在运行时如何跳过。
  3. strip函数配合
    在 Android 源码中,为了防止变量里有看不见的空格,大牛们喜欢写:
    ifeq ($(strip $(LOCAL_MODULE_CLASS)), SHARED_LIBRARIES)
    这能保证逻辑的绝对健壮。

【本篇自测】
请看这段代码:

DEBUG :=ifeq($(DEBUG),)FLAG :=-O2elseFLAG :=-gendif
  1. 最终FLAG的值是多少?

  2. 如果把第一行改为DEBUG := 1,执行结果会变吗?

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/14 14:25:01

FusionMamba实战:如何用状态空间模型提升遥感图像融合效果(附代码)

FusionMamba实战:如何用状态空间模型提升遥感图像融合效果(附代码) 遥感图像处理领域正迎来一场由状态空间模型引发的技术革新。当传统卷积神经网络在长序列建模上捉襟见肘,当Transformer架构因二次方复杂度而难以落地&#xff0c…

作者头像 李华
网站建设 2026/7/14 14:25:04

YOLO-World实战:5分钟搞定自定义物体检测(附完整代码)

YOLO-World实战:5分钟实现零样本自定义物体检测 从传统检测到开放词汇的跨越 想象一下,你正在开发一个智能零售系统,突然需要检测货架上新上市的"气泡水蜜桃味苏打水"——这种在训练数据中从未出现过的商品类别。传统目标检测模型…

作者头像 李华
网站建设 2026/7/14 14:25:03

告别Windows广告骚扰?这款开源工具让系统回归纯净

告别Windows广告骚扰?这款开源工具让系统回归纯净 【免费下载链接】OFGB GUI Tool To Removes Ads From Various Places Around Windows 11 项目地址: https://gitcode.com/GitHub_Trending/of/OFGB 副标题:OFGB系统优化工具深度评测:…

作者头像 李华
网站建设 2026/7/14 14:25:15

Lingyuxiu MXJ LoRA效果优化:卷积神经网络在人像生成中的应用

Lingyuxiu MXJ LoRA效果优化:卷积神经网络在人像生成中的应用 1. 引言:当AI绘画遇上卷积神经网络 你有没有遇到过这样的情况:用AI生成的人像图片,整体感觉不错,但仔细一看,皮肤质感不够真实,发…

作者头像 李华
网站建设 2026/7/16 14:26:29

Qwen3-0.6B-FP8项目实战:开发一个Claude风格的对话桌面应用

Qwen3-0.6B-FP8项目实战:开发一个Claude风格的对话桌面应用 最近在折腾本地大模型,总想着能不能做个既好看又好用的桌面应用,把模型的能力直观地展现出来。Claude那种简洁优雅的对话界面一直让我印象深刻,于是就想,能…

作者头像 李华