Makefile中的条件编译:ifeqifneqifdef和ifndef
Posted 代二毛
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Makefile中的条件编译:ifeqifneqifdef和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字符串,两者满足就执行语句,具体做法就是分别在两个变量里查找字符串然后再拼接成一个字符串进行判断。
ifdef和ifndef
参考博客:《条件编译在工作当中的应用》
以上是关于Makefile中的条件编译:ifeqifneqifdef和ifndef的主要内容,如果未能解决你的问题,请参考以下文章