IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> cmake使用教程(七)-流程和循环,Android开发面试题 -> 正文阅读

[移动开发]cmake使用教程(七)-流程和循环,Android开发面试题

else(expression)

else section.

COMMAND1(ARGS …)
COMMAND2(ARGS …)
#…
endif(expression)

此处有一点注意:else和endif中的表达式是可以省略的,看到现在大部分网上的教程有必须加SET(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS ON)这句才能省略表达式,一脸懵逼,关于那个变量,我也查不到api,包括废弃的,所以我都不写这句。

if表达式可以用长表达式,优先级顺序如下:

EXISTS, COMMAND, DEFINED
EQUAL, LESS, LESS_EQUAL, GREATER, GREATER_EQUAL, STREQUAL, STRLESS, STRLESS_EQUAL, STRGREATER, STRGREATER_EQUAL, VERSION_EQUAL, VERSION_LESS, VERSION_LESS_EQUAL, VERSION_GREATER, VERSION_GREATER_EQUAL, MATCHES
NOT,AND,OR

别看下面这张表很长,其实没什么内容:

表达式truefalse说明
1, ON, YES, TRUE, Y,或者是非0数字0, OFF, NO, FALSE, N, IGNORE, NOTFOUND,空字符串,或者带-NOTFOUND后缀布尔判断值大小写不敏感
<variablestring>已经定义且不是false的变量未定义或者是false的变量
expression为falseexpression为true
AND两个条件全部成立至少有一个为假
COMAND command-name已经定义的command,macro或者function未定义
POLICY policy-idpolicy存在policy不存在形式为CMP
TARGET target-name已经用add_executable(), add_library(), or add_custom_target()定义过的target未定义
TEST test-nameadd_test()创建过的测试名称未创建
EXISTS path-to-file-or-directory文件或者路径存在文件或者路径不存在此处是全路径
file1 IS_NEWER_THAN file2file1的时间戳大于file2的时间戳

其中一个文件不存在
两个文件时间戳相同 | 其他情况 | 文件路径必须是全路径 |
| IS_DIRECTORY path-to-directory | 给定的变量是文件夹 | 不是文件夹 | 全路径 |
| IS_SYMLINK file-name | 变量是链接 | 不是 | 全路径 |
| IS_ABSOLUTE path | 是绝对路径 | 不是 | |
| <variable|string> MATCHES regex | 正则表达式匹配成功 | 匹配失败 | |
| <variable|string> LESS <variable|string> | 给定的变量是数字并且左边小于右边 | 左边大于右边 | 用于比较数字的大小
LESS:小于
GREATER:大于
EQUAL:等于
GREATER_EQUAL:大于等于
LESS_EQUAL:小于等于
|
| <variable|string> STRLESS <variable|string> | 按字典顺序左边小于右边 | 左边大于右边 | 用于比较字符串
LESS:小于
STRGREATER:大于
STREQUAL:等于
STRLESS_EQUAL:小于等于
STRGREATER_EQUAL:大于等于 |
| <variable|string> VERSION_LESS <variable|string> | 左边的版本号小于右边的版本号 | 大于 | 用于版本号的比较
LESS:小于
VERSION_GREATER:大于
VERSION_EQUAL:等于
VERSION_LESS_EQUAL:小于等于
VERSION_GREATER_EQUAL:大于等于 |
| <variable | string> IN_LIST | 右边的item中有左边 | 没有 |
| DEFINED | 已定义变量 | 未定义变量 | |
| (expr1) AND (expr2 OR (expr3)) | 1为真且2或者3至少有一个为真 | 其他情况 | |

在if条件表达式中,是不必用${var}来取变量的值的,系统会自动转换。例如设置两个变量,

《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享

然后比较各种取值的情况:

set(var1 OFF)
set(var2 “var1”)

if(var2)实际是判断var1是否为false; if(${var2})相当于if(var1),实际是判断OFF;

foreach循环

1. 第一种形式

foreach(loop_var arg1 arg2 …)
COMMAND1(ARGS …)
COMMAND2(ARGS …)

endforeach(loop_var)

此处注意endforeach(loop_var)的变量最好不要省略,因为foreach循环是依靠变量来跳出循环的。

foreach和匹配endforeach之间的所有命令都会被系统记录而不被调用。 一旦找到了了endforeach,则会执行原来记录的命令。在循环的每次迭代之前,${loop_var}将被设置为具有列表中当前值的变量。

foreach(i 0 1 2 3)
message(STATUS “current is ${i}”)
endforeach(i)
message(STATUS “end”)
endforeach(i)

一个简单的循环,但是多了一个endforeach。看一下结果

? StepTest git:(master) ? cmake -P foreach.cmake
– current is 0
– current is 1
– current is 2
– current is 3
– end
CMake Error at foreach.cmake:5 (endforeach):
endforeach An ENDFOREACH command was found outside of a proper FOREACH
ENDFOREACH structure. Or its arguments did not match the opening FOREACH
command.

报错了。没有匹配的foreach。

2. 第二种形式

foreach(loop_var RANGE total)

从0开始直到total结束(包含total)

foreach(i RANGE 3)
message(STATUS “current is ${i}”)
endforeach(i)

范围将会是0-3,查看一下结果:

? StepTest git:(master) ? cmake -P foreach.cmake
– current is 0
– current is 1
– current is 2
– current is 3

3. 第三种形式

foreach(loop_var RANGE start stop [step])

从start开始直到stop结束之间的值,可以设置步进值step。

foreach(i RANGE 0 3 1)
message(STATUS “current is ${i}”)
endforeach(i)

输出结果和上面的一样.

注意一点:最后的结果不会大于stop值,步进值是浮点数时会被转为整形

4. 第四种形式

foreach(loop_var IN [LISTS [list1 […]]]
[ITEMS [item1 […]]])

也比较简单,多了LIST关键字来循环list。不多讲。

while循环

while(condition)
COMMAND1(ARGS …)
COMMAND2(ARGS …)

endwhile(condition)

注意endwhile中的条件最好不要省略。这个条件和if中的表达式是一样的规则。 循环形式和foreach循环类似,直到碰到endwhile才开始执行每一条指令。

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-12-11 15:50:25  更:2021-12-11 15:52:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:36:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码