条件语句中使用到了三个关键字:“ifeq”、“else”和“endif”。其中:

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

2.        “else”之后就是当条件不满足时的执行部分。不是所有的条件语句都需要此部分。

3.        “endif”表示一个条件语句的结束,任何一个条件表达式都必须以“endif”结束。

此关键字用来判断参数是否相等,格式如下:

`ifeq (ARG1, ARG2)'

`ifeq 'ARG1' 'ARG2''

`ifeq "ARG1" "ARG2"'

`ifeq "ARG1" 'ARG2''

`ifeq 'ARG1' "ARG2"'替换展开“ARG1”和“ARG1”后,对它们的值进行比较

通常我们会使用它来判断一个变量的值是否为空(不是任何字符)。参数值可能是通过引用变量或者函数得到的,因而在展开过程中可能造成参数值中包含空字符(空格等)。一般在这种情况时我们使用make的“strip”函数来对它变量的值进行处理,去掉其中的空字符。格式为:

ifeq ($(strip $(foo)),)

TEXT-IF-EMPTY

endif

即就是在“$(foo)”中存在若干前导和结尾空格,“TEXT-IF-EMPTY”也会被作为Makefile需要执行的一部分。

关键字“ifneq”实现的条件判断语句和“ifeq”相反

关键字“ifdef”

关键字“ifdef”用来判断一个变量是否已经定义。格式为:

`ifdef VARIABLE-NAME'

如果变量“VAEIABLE_NAME”的值非空(在Makefile中没有定义的变量的值为空),那么表达式为真

例1:

bar =

foo = $(bar)

ifdef foo

frobozz = yes

else

frobozz = no

endif

例2:

foo =

ifdef foo

frobozz = yes

else

frobozz = no

endif

例1中的结果是:“frobozz = yes”;而例2的结果是:“frobozz = no”。

关键字“ifndef”实现的功能和“ifdef”相反

ifeq ifneq ifdef ifndef的更多相关文章

  1. C/C++预处理指令#define,#ifdef,#ifndef,#endif…

    2016年12月29日更新: 今天查看以前文件的时候, 突然发现了#error 这个预处理指令.然后回想一下工作, 发现这个指令使用场景还是很多的.比如: 一个项目的模块儿之多,源文件之大,代码之多, ...

  2. iOS 小知识 - #if , #ifdef , #ifndef.

    Q : 在项目的 .h 文件中, #ifndef XXX_h #define XXX_h //程序段1 #endif  /* XXX_h */ 的作用? A : 如果 XXX.h 不存在,就引入 XX ...

  3. C/C++预处理指令#define,#ifdef,#ifndef,#endif… (转)

    本文转自博文C/C++预处理指令#define,#ifdef,#ifndef,#endif….这篇博文写得特别好,特转载. 本文主要记录了C/C++预处理指令,常见的预处理指令如下: #空指令,无任何 ...

  4. C 和 Object-C中的 #ifdef #ifndef

    很多宏是为了进行条件编译.一般情况下,源程序中所有的行都参加编译.但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是“条件编译”.有时,希望当满足某条件时 ...

  5. C/C++预处理指令#include,#define,#undef,#if,#ifdef,#ifndef,#elif,#endif,#error......

    本文主要记录了C/C++预处理指令,常见的预处理指令如下: #空指令,无任何效果 #include包含一个源代码文件 #define定义宏 #undef取消已定义的宏 #if如果给定条件为真,则编译下 ...

  6. #ifdef #ifndef使用

    #ifdef THREAD_ON while (TRUE) #endif 如上没定义THREAD_ON时,是不会跑到while中去的 如上没定义THREAD_ON时,是会跑到else中去的 #ifnd ...

  7. 史上最全条件编译解析 #ifdef #ifndef #undef #else #endif

    C语言和C++语言程序中广泛存在着#ifdef或#ifndef等条件编译语句,本篇就系统介绍下他们的用法. 这几个宏是为了进行条件编译.一般情况下,源程序中所有的行都参加编译.但是有时希望对其中一部分 ...

  8. C++ #if #endif #define #ifdef #ifndef #if defined #if !defined详解 (转)

    (源)http://blog.csdn.net/sky1203850702/article/details/42024673 首先,让我们先从头文件开始,在很多头文件里,我们会看到这样的语句 #ifn ...

  9. C语言的#if #ifdef #ifndef

    #if #ifedf #ifndef   —般情况下,C语言源程序中的每一行代码.都要参加编译.但有时候出于对程序代码优化的考虑.希望只对其中一部分内容进行编译.此时就需要在程序中加上条件,让编译器只 ...

随机推荐

  1. java项目中ehcache缓存最简单用法

      java项目中ehcache缓存最简单用法: 1.下载ehcache-core-2.4.3.jar复制到项目的lib目录下 2.新建ehcache.xml文件,放置在项目src目录下的resour ...

  2. Python - Django - 作者表多对多关联书籍表

    models.py 代码: from django.db import models # Create your models here. # 出版社 class Publisher(models.M ...

  3. UIFontDownLoad ----动态下载系统提供的字体

    程序运行结果如下 : 当点击对应单元格实现下载对应的字体. 控制台打印结果如下 : 2015-10-05 11:14:04.132 UIFontDownLoad[12721:86827] state ...

  4. CenOS 7 安装Redis

    1.Redis介绍 Redis是一个使用ANSI C编写的开源.支持网络.基于内存.可选持久性的键值对存储数据库.从2015年6月开始,Redis的开发由Redis Labs赞助,而2013年5月至2 ...

  5. csu 1909: Perfect Chocolate

    1909: Perfect Chocolate Submit Page   Summary   Time Limit: 3 Sec     Memory Limit: 128 Mb     Submi ...

  6. zookeeper 操作命令

    简介 查阅了网上相关资料,介绍zookeeper客户端命令并不是非常全面,大多数都是简单介绍ls.get.set.delete.stat这几个简单命令的,下面我把help中的所有命令简单介绍一下以供参 ...

  7. 《Tsinghua os mooc》第21~22讲 文件系统

    第二十一讲 文件系统 文件系统是操作系统中管理持久性数据的子系统,提供数据存储和访问功能. 组织.检索.读写访问数据 大多数计算机系统都有文件系统 Google 也是一个文件系统 文件是具有符号名,由 ...

  8. Django mysql-client

    sudo apt-get install libmysqlclient-dev 报错,mysqlclient 没有安装 :实际已经安装,这是因为mysql安装时没有安装好 https://www.cn ...

  9. ubuntu18和windows10双系统时间不同步问题(Ubuntu)

    1.安装并校准时间 sudo apt install ntpdate sudo ntpdate time.windows.com 2.写入硬件配置 sudo hwclock --localtime - ...

  10. 【C++札记】类的分离式写法

    介绍 类的分离式写法,使得代码更加规范,增强了阅读性. 分离式写法的规则: 1.类的变量:写在类的里面 2.成员函数:类中写函数的声明,函数的定义写在类体外. 3.写在类外函数定义时,类名前加限定(O ...