ifeq 实现 “或”

Makefile知识 makefile 定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,完成整个工程的自动化编译工作。makefile编译规则:①.如果这个工程没有编译过,那么我们的所有 C 文件都要编译并被链接。②.如果这个工程的某几个 C 文件被修改,那么我们只编译被修改的 C 文件,并链接目标程。③.如果这个工程的头文件被改变了,那么我们需要编译引用了这几个头文件的 C 文件,并链接目标程序。 阅读详情

在现有的Makefile里增加一个条件判断,实现CFILES += foo.c,这个条件判断是一个“或”关系的表达式,用C写的话是这样的:

if (INCLUDE_A == 1 || INCLUDE_B == 1)
{
  CFILES += foo.c
}
用 ifeq 方法如下:
ifneq ($(INCLUDE_A)_$(INCLUDE_B), 0_0)   // 逻辑反一下
CFILES += foo.c 
使用条件判断
——————
使用条件判断,可以让make根据运行时的不同情况选择不同的执行分支。条件表达式可以是比较变量的值,或是比较变量和常量的值。
一、示例
下面的例子,判断$(CC)变量是否“gcc”,如果是的话,则使用GNU函数编译目标。
libs_for_gcc = -lgnu
normal_libs =
foo: $(objects)
ifeq ($(CC),gcc)
$(CC) -o foo $(objects) $(libs_for_gcc)
else
$(CC) -o foo $(objects) $(normal_libs)
endif
可见,在上面示例的这个规则中,目标“foo”可以根据变量“$(CC)”值来选取不同的函数库来编译程序。
我们可以从上面的示例中看到三个关键字:ifeq、else和endif。ifeq的意思表示条件语句的开始,并指定一个条件表达式,表达式包含两个参数,以逗号分隔,表达式以圆括号括起。else表示条件表达式为假的情况。endif表示一个条件语句的结束,任何一个条件表达式都应该以endif结束。
当我们的变量$(CC)值是“gcc”时,目标foo的规则是:
foo: $(objects)
$(CC) -o foo $(objects) $(libs_for_gcc)
而当我们的变量$(CC)值不是“gcc”时(比如“cc”),目标foo的规则是:
foo: $(objects)
$(CC) -o foo $(objects) $(normal_libs)
当然,我们还可以把上面的那个例子写得更简洁一些:
libs_for_gcc = -lgnu
normal_libs =
ifeq ($(CC),gcc)
libs=$(libs_for_gcc)
else
libs=$(normal_libs)
endif
foo: $(objects)
$(CC) -o foo $(objects) $(libs)
二、语法
条件表达式的语法为:
ifeq
endif
以及:
ifeq
else
endif
其中表示条件关键字,如“ifeq”。这个关键字有四个。
第一个是我们前面所见过的“ifeq”
ifeq (, )
ifeq '' ''
ifeq "" ""
ifeq "" ''
ifeq '' "" 
比较参数“arg1”和“arg2”的值是否相同。当然,参数中我们还可以使用make的函数。如:
ifeq ($(strip $(foo)),)

endif
这个示例中使用了“strip”函数,如果这个函数的返回值是空(Empty),那么就生效。
第二个条件关键字是“ifneq”。语法是:
ifneq (, )
ifneq '' ''
ifneq "" ""
ifneq "" ''
ifneq '' "" 
其比较参数“arg1”和“arg2”的值是否相同,如果不同,则为真。和“ifeq”类似。
第三个条件关键字是“ifdef”。语法是:
ifdef
如果变量的值非空,那到表达式为真。否则,表达式为假。当然,同样可以是一个函数的返回值。注意,ifdef只是测试一个变量是否有值,其并不会把变量扩展到当前位置。还是来看两个例子:
示例一:
bar =
foo = $(bar)
ifdef foo
frobozz = yes
else
frobozz = no
endif


示例二:
foo =
ifdef foo
frobozz = yes
else
frobozz = no
endif


第一个例子中,“$(frobozz)”值是“yes”,第二个则是“no”。
第四个条件关键字是“ifndef”。其语法是:
ifndef
这个我就不多说了,和“ifdef”是相反的意思。
在这一行上,多余的空格是被允许的,但是不能以[Tab]键做为开始(不然就被认为是命令)。而注释符“#”同样也是安全的。“else”和“endif”也一样,只要不是以[Tab]键开始就行了。
特别注意的是,make是在读取Makefile时就计算条件表达式的值,并根据条件表达式的值来选择语句,所以,你最好不要把自动化变量(如“$@”等)放入条件表达式中,因为自动化变量是在运行时才有的。
而且,为了避免混乱,make不允许把整个条件语句分成两部分放在不同的文件中。


makefile工作笔记0003---Makefile的ifeq逻辑或,逻辑与的变通实现 技术交流QQ群【JAVA,C++,Python,.NET,BigData,AI】:170933152 (1)ifeq的用法 ifeq ($(变量名), 变量值 ) ........ else ifeq ($(..), ..) ......... else ......... endif (2)最近在学习makefile的过程中遇到需要用ifeq进行... 阅读详情

相关推荐

运放偏置电路设计:如何精准计算差分放大器的电压偏移量

本文深入解析了差分放大器偏置电路的设计原理与精准计算方法,重点阐述了如何通过引入参考电压实现信号电压偏移,以适应单电源ADC的输入范围。文章结合实战案例,详细推导了偏移电压公式,并强调了电阻匹配、运放选型及PCB布局对精度和共模抑制比的关键影响,帮助硬件工程师避免常见设计陷阱。

weixin_29288313的博客 634

Makefile 零基础学习笔记:if 的用法

Makefile 零基础学习笔记:if 的用法

坚韧与专注 7300

RealSense D455启动教程

RealSense D455启动教程 修改rs_camera.launch

每天进步一点点 2417

makefile 条件判断语句

makefile中支持条件判断语句。可以根据条件的值决定 make 的执行。可以比较两个不同变量或者变量和常量值。条件判断语句只能用于控制 make 实际执行的语句;但是,不能控制规则中命令的执行过程。注意:中间不可以有空格。下一篇介绍函数的定义于调用。

wuyiyu_的博客 5169

手把手教你用思岚RPLIDAR C1激光雷达实现简单环境扫描(树莓派4B+Ubuntu22.04)

本文详细介绍了如何在树莓派4B(Ubuntu 22.04系统)上驱动思岚RPLIDAR C1激光雷达,从硬件连接、权限配置、SDK编译到运行示例程序,最终实现环境扫描数据的可视化。通过手把手教程,帮助开发者和爱好者快速上手激光雷达应用,构建简单的环境扫描图。

j2k3l4的博客 1131

SAP MM采购合同创建全解析:ME31K操作与后台逻辑

在SAP ERP的物料管理模块中,采购合同作为框架协议的核心,定义了企业与供应商之间的长期供货关系。它与采购订单不同,合同不直接产生收货或发票,而是为后续采购订单提供数据源。创建合同(事务码ME31K)时,需要区分数量合同与金额合同,并维护抬头、行项目、有效期、价格条件和税码等关键信息。SAP通过源确定机制在创建采购订单时自动匹配合同,同时审批策略、编码范围和输出类型也会影响合同的实际可用性。掌握合同创建逻辑,能有效解决采购订单无法带出合同、审批未触发、价格缺失等高频问题。从ME31K实操出发,系统梳理采购

weixin_30000735的博客 196

Makefile学习4 - if函数

Makefile if函数

to_be_better_wen的博客 2454

18.EC实战 新建项目工程并配置各个引脚的工作方式(持续更新)

本博文介绍了从零开始新建EC工程及对各个引脚进行了工作模式的初始化配置

qq_30135687的博客 1731

makefile if 使用

1、在目标外使用if#这个ifeq else endif,在target 外部,关键字前边一定要有tab ifeq ("aaa","bbb") #内容前可以有空格,如果是tab时,解析为命令 #变量前可以多个空格 LIBS= -laaa else #+echo "test" LIBS= -lbbb endif2、在目标内使用ifa、情形一:shell 方式#make预

liuzhuchen的专栏 4万+

即插即用篇 | 手把手教你 YOLOv11 添加注意力机制 | 适用于【检测任务】【分类任务】【分割任务】【关键点任务】| 20+ 种全打通!

即插即用篇 | 手把手教你 YOLOv11 添加注意力机制 | 适用于【检测任务】【分类任务】【分割任务】【关键点任务】| 20+ 种全打通!

Coding... 2831

人像抠图 + OpenGL ES 还能这样玩?没想到吧(附带源码)

OpenGL ES 利用抠图算法实现人像留色。

字节流动 3万+

ifeq makefile 或语句_makefile中的“ifeq”条件语法

由于条件指令ifeq经常用于比较从变量(通常包含空格)扩展的单词,我们可能希望并且实际上需要Make来去除任何前导或尾随空格.事实上,你可能有一个相反的观点,即Make应该逐字记录ifeq条件的所有参数,因为用户可能已经将这些空格作为“测试”的一部分,并打算让这些空白进行决策在评估此ifeq指令时,factor为true或false.我无法决定,哪一个更正确.事实上,我并不孤单!让自己无法决定,哪...

weixin_39592137的博客 2729

PostgreSQL:Patroni 高可用架构,基于etcd的自动故障转移集群

本文详细介绍了基于Patroni和etcd构建PostgreSQL高可用集群的方案。Patroni作为外部守护进程,通过etcd分布式协调服务实现自动故障转移、主节点选举等关键功能,弥补了PostgreSQL原生缺乏自动故障转移的不足。文章涵盖核心架构(3节点PG+3节点etcd)、环境规划、etcd集群部署(包括配置验证)以及Patroni安装配置的关键步骤,特别强调了Patroni自动初始化PG实例、配置同步复制等生产级特性。该方案通过外部组件协同工作,在不修改PG源码的情况下实现了生产环境所需的高可用

数据知道的博客 2489

学习笔记:Makefile的ifeq逻辑或,逻辑与的变通实现

(1)ifeq的用法          ifeq ($(变量名), 变量值 )            ........          else ifeq ($(..), ..)            .........          else            .........          endif (2)最近在学习makefile的过程中遇到需要用i

fanchenxinok的专栏 8万+

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

ifeq makefile 或语句_makefile ifeq 语句

Page 12 使用条件判断 ifeq,else,endif ifeq ($(CC),gcc) Ifeq表示条件语句的开始,并指定一个条件表达式,表达式包含两个参数, 以逗号分隔,表达式以圆括号括起......-c main.c -o main.o lib.o : lib.c lib.h $(CC) $(CFLAGS) -c lib.c -o lib.o clean : rm myprog $(O...

weixin_39747807的博客 1223

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

ifeq makefile 或语句_Makefile ifeq逻辑或

How do you perform a logical OR using make's ifeq operator?e.g., I have (simplified):ifeq ($(GCC_MINOR), 4)CFLAGS += -fno-strict-overflowendififeq ($(GCC_MINOR), 5)CFLAGS += -fno-strict-overflowendifb...

weixin_39783771的博客 355

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Android.mk 中 ifeq ifneq 的普通与特殊用法详解

(1)ifeq的的常用方法 ifeq ($(变量名), 变量值 ) ........ else ifeq ($(..), ..) ......... else ......... endif ifneq ($(变量名), 变量值 ) ........ else ifneq ($(..), ..) ......... else ......... endif (2)最近在学习Andr

hipeboy的博客 8273

ifeq makefile 或语句,Makefile ifeq逻辑或

How do you perform a logical OR using make's ifeq operator?e.g., I have (simplified):ifeq ($(GCC_MINOR), 4)CFLAGS += -fno-strict-overflowendififeq ($(GCC_MINOR), 5)CFLAGS += -fno-strict-overflowendifb...

weixin_42303616的博客 528

ifeq makefile 或语句_学习笔记:Makefile的ifeq逻辑或,逻辑与的变通实现

(1)ifeq的用法ifeq ($(变量名), 变量值 )........else ifeq ($(..), ..).........else.........endif(2)最近在学习makefile的过程中遇到需要用ifeq进行逻辑与判断,但是ifeq并没有像其他编程语言那样有 逻辑或(||) 逻辑与(&&) 的符号可用。这时候需要变通一下。1)逻辑与变通实现:举例说明:比如...

weixin_39610422的博客 1086

ifeq makefile 或语句_makefile中的ifeq、ifdef、ifneq的区别

判断语句使用条件判断,可以让make根据运行时的不同情况选择不同的执行分支。条件表达式可以是比较变量的值,或是比较变量和常量的值。一、示例下面的例子,判断$(CC)变量是否“gcc”,如果是的话,则使用GNU函数编译目标。libs_for_gcc=-lgnunormal_libs=foo:$(objects)ifeq($(CC),gcc)$(CC)-ofoo$(objects)$...

weixin_36075067的博客 935

Makefile中条件判断ifeq、ifneq、ifdef、ifndef的含义

一、ifeq 1、举例 根据 $(CC) 取值不同,执行不同的处理逻辑 libs_for_gcc = -lgnu normal_libs = foo: $(objects) ifeq ($(CC),gcc) $(CC) -o foo $(objects) $(libs_for_gcc) else $(CC) -o foo $(objects) $(normal_libs) endif ifeq:表示条件语句的开始,并指定一个条件表达式。表达式包含两个参数,以逗号

sinat_34241861的博客 2万+

ifeq ifneq ifdef ifndef

条件语句中使用到了三个关键字:“ifeq”、“else”和“endif”。其中: 1.        “ifeq”表示条件语句的开始,并指定了一个比较条件(相等)。之后是用圆括号括包围的、使用逗号“,”分割的两个参数,和关键字“ifeq”用空格分开。参数中的变量引用在进行变量值比较时被展开。“ifeq”之后就是当条件满足make需要执行的,条件不满足时忽略。 2.        “else”之

蜗牛的家 1万+

ifeq makefile 或语句_makefile中的 ifeq ifneq ifdef ifndef条件判断

feq ifneq ifdef ifndef条件语句中使用到了三个关键字:“ifeq”、“else”和“endif”。其中:1. “ifeq”表示条件语句的开始,并指定了一个比较条件(相等)。之后是用圆括号括包围的、使用逗号“,”分割的两个参数,和关键字“ifeq”用空格分开。参数中的变量引用在进行变量值比较时被展开。“ifeq”之后就是当条件满足make需要执行的,条件不满足时忽略...

weixin_39546092的博客 800

(转)Makefile ifeq用法

(1)ifeq的用法         ifeq ($(变量名), 变量值 )           ........         else ifeq ($(..), ..)           .........         else           .........         endif(2)最近在学习makefile的过程中遇到需要用ifeq进行逻辑与判断,但是ifeq并没有...

weixin_39906825的博客 2500

ifeq makefile 或语句_Makefile 中 ifeq ifneq 等用法

(1)ifeq的用法ifeq ($(变量名), 变量值 )........else ifeq ($(..), ..).........else.........endif(2)最近在学习makefile的过程中遇到需要用ifeq进行逻辑与判断,但是ifeq并没有像其他编程语言那样有 逻辑或(||) 逻辑与(&&) 的符号可用。这时候需要变通一下。1)逻辑与变通实现:举例说明:比如...

weixin_40009393的博客 1018

ifeq makefile 或语句_Makefile ifeq、ifneq、ifdef和ifndef(条件判断)

我们日常在使用 Makefile 编译文件时会遇到需要分条件执行的情况,比如我们在一个工程文件中,我们的可编译的源文件很多,但是它们的类型是不相同的,所以我们编译的时候,用到的编译器是不一样的。我们不可能去手动各种文件的编译,手动去处理他们之间他们的编译会很乱,操作也会很复杂。所以 make 为我们提供了相应的方法可以实现条件判断的功能。使用说明:需要解决的问题:要根据判断,分条件执行语句。条件语...

weixin_29405191的博客 651
上一篇: 解读mkmmc_android脚本
下一篇: makefile的基本用法
lamdoc
博客等级 码龄18年 155粉丝 655原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值