Makefile中的条件编译:ifeq、ifneq、ifdef和ifndef

前言

在程序的打包环境中,通常会有打包选项,通过选择不同的选项可以打包出适应不同硬件平台和不同功能的程序。其中就涉及条件编译,可以选择不同的库进行链接,也可以在同一个库里选择编译不同部分的代码。ifeq、ifneq、ifdef和ifndef在逻辑上就相当于C语言的if条件语句,通过判断某个条件,程序将走不同的分支。

ifeq和ifneq:

1.常见用法:
ifeq ($(plat), hi3516cv500)
	CROSS = arm-himix200-linux-
else ifeq($(plat), JLQ0310)	
	CROSS = arm-none-linux-gnueabi-
endif
CC=$(CROSS)gcc

2.多条件判断:
ifeq ($(findstring MAJRS,$(SupportDevices))$(findstring CUSTOM,$(Specialities)), MAJRSCUSTOM)
	xxxx
endif

代码分析:

ifeq和ifneq在逻辑上就是C语言的if语句,ifeq是后面的条件成立时执行,ifneq是条件不成立时执行,具体用哪一个根据需求。
常见用法:
同一个打包环境打包出适应不同硬件平台的程序。运行在操作系统之上的程序是不考虑硬件平台的,写C、C++、Java的程序员是不用考虑自己写的代码将来在什么硬件平台运行,要考虑就没法写代码了。在嵌入式开发中,同一份代码要适应不同的硬件平台只需要用匹配的交叉工具编译链去编译程序即可。上面的代码就是在判断本次打包的程序将要在什么平台上运行,从而选择不同的交叉工具编译链去编译程序。
多条件判断:ifeq和ifneq在使用上没有C语言的if语句灵活,if语句有与(&&)、或(||)等逻辑操作,ifeq和ifneq是没有,但是可以通过拼接的方式来实现多条件判断。代码中的第二种用法就相当于C语言里的条件与。findstring是在字符串中查找特定的字符,具体用法在这里不做介绍,上面的判断条件就是SupportDevices里有MAJRS字符串,同时Specialities变量里有CUSTOM字符串,两者满足就执行语句,具体做法就是分别在两个变量里查找字符串然后再拼接成一个字符串进行判断。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值