ifeq ifneq ifdef ifndef
条件语句中使用到了三个关键字:“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的更多相关文章
- C/C++预处理指令#define,#ifdef,#ifndef,#endif…
2016年12月29日更新: 今天查看以前文件的时候, 突然发现了#error 这个预处理指令.然后回想一下工作, 发现这个指令使用场景还是很多的.比如: 一个项目的模块儿之多,源文件之大,代码之多, ...
- iOS 小知识 - #if , #ifdef , #ifndef.
Q : 在项目的 .h 文件中, #ifndef XXX_h #define XXX_h //程序段1 #endif /* XXX_h */ 的作用? A : 如果 XXX.h 不存在,就引入 XX ...
- C/C++预处理指令#define,#ifdef,#ifndef,#endif… (转)
本文转自博文C/C++预处理指令#define,#ifdef,#ifndef,#endif….这篇博文写得特别好,特转载. 本文主要记录了C/C++预处理指令,常见的预处理指令如下: #空指令,无任何 ...
- C 和 Object-C中的 #ifdef #ifndef
很多宏是为了进行条件编译.一般情况下,源程序中所有的行都参加编译.但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是“条件编译”.有时,希望当满足某条件时 ...
- C/C++预处理指令#include,#define,#undef,#if,#ifdef,#ifndef,#elif,#endif,#error......
本文主要记录了C/C++预处理指令,常见的预处理指令如下: #空指令,无任何效果 #include包含一个源代码文件 #define定义宏 #undef取消已定义的宏 #if如果给定条件为真,则编译下 ...
- #ifdef #ifndef使用
#ifdef THREAD_ON while (TRUE) #endif 如上没定义THREAD_ON时,是不会跑到while中去的 如上没定义THREAD_ON时,是会跑到else中去的 #ifnd ...
- 史上最全条件编译解析 #ifdef #ifndef #undef #else #endif
C语言和C++语言程序中广泛存在着#ifdef或#ifndef等条件编译语句,本篇就系统介绍下他们的用法. 这几个宏是为了进行条件编译.一般情况下,源程序中所有的行都参加编译.但是有时希望对其中一部分 ...
- C++ #if #endif #define #ifdef #ifndef #if defined #if !defined详解 (转)
(源)http://blog.csdn.net/sky1203850702/article/details/42024673 首先,让我们先从头文件开始,在很多头文件里,我们会看到这样的语句 #ifn ...
- C语言的#if #ifdef #ifndef
#if #ifedf #ifndef —般情况下,C语言源程序中的每一行代码.都要参加编译.但有时候出于对程序代码优化的考虑.希望只对其中一部分内容进行编译.此时就需要在程序中加上条件,让编译器只 ...
随机推荐
- 阶段5 3.微服务项目【学成在线】_day07 课程管理实战_04-新增课程-数据字典
课程的等级是个单选按钮 2.3 数据字典 2.3.1介绍 在新增课程界面需要选择课程等级.课程状态等,这些信息统一采用数据字典管理的方式. 本项目对一些业务的分类配置信息,比如:课程等级.课程状态.用 ...
- windows 10 enterprize LTSC
to avtivate the windows 10 enterprize LTSC version, do the following command every 6 months. slmgr - ...
- jQuery学习二
1.id选择器: // 4.如果页面中多个元素id相同,jquery只会获取第一个id的jquery对象 var jquery = $('#name'); alert(jquery.val()); v ...
- node.js写巨大的xlsx
一般用node-xlsx写xlsx文件的话局要把数据全部放在内存里面再写到文件里,如果文件很大的话就会导致内存吃不消. 可以使用PySpreadsheet这个npm库,他支持写很大的文件. PySpr ...
- 第二十三章 多项目集中权限管理及分布式会话——《跟我学Shiro》
二十三章 多项目集中权限管理及分布式会话——<跟我学Shiro> 博客分类: 跟我学Shiro 跟我学Shiro 目录贴:跟我学Shiro目录贴 在做一些企业内部项目时或一些互联网后台时 ...
- jenkins插件Configuration Slicing plugin批量修改配置
作用 批量修改jenkins上job配置
- (四)Asp.net web api中的坑-【api的返回值】
void无返回值 IHttpActionResult HttpResponseMessage 自定义类型 我这里并不想赘述这些返回类型, 可以参考博文http://blog.csdn.net/leon ...
- VMware VSAN 设计规则
1.集群节点数量:3-64台主机(生产环境最少4节点起,5.5版本支持32节点,6.0版本支持64节点),配置万兆网卡,主机规格应满足VSAN兼容性要求. 2.每台主机需配置磁盘组,每台主机的磁盘组数 ...
- 锚点/JQ:点击导航跳到网页中的指定位置
今天做了一个简单的功能,页面往下滚动到一定位置,顶部出现一个浮动的导航栏,点击导航栏标签,下面页面跳转到相应的区域.回到顶部,导航栏隐藏. 因为顶部有一个浮动的导航栏,所以跳转到下面页面的时候,总是盖 ...
- 打开app应用
=========================================人才网 <!--app底部浮动广告--><style> footer { padding-bo ...