【CMake 入门与进阶(10)】 CMakeLists.txt 语法规则_循环语句(附使用代码)

news2024/11/22 15:39:44

        cmake 中除了 if 条件判断之外,还支持循环语句,包括 foreach()循环、while()循环。

foreach 循环

        1、foreach 基本用法

        foreach 循环的基本用法如下所示:

foreach(loop_var arg1 arg2 ...)
     command1(args ...)
     command2(args ...)
     ...
endforeach(loop_var)

        endforeach 括号中的可写可不写,如果写了,就必须和 foreach 中的一致。

        参数 loop_var 是一个循环变量,循环过程中会将参数列表中的变量依次赋值给他,类似于 C 语言 for 循环中经常使用的变量 i。

# foreach 循环测试
foreach(loop_var A B C D)
     message("${loop_var}")
endforeach()

        打印信息为:

A
B
C
D

        使用 foreach 可以编译一个列表中的所有元素,如下所示:

# foreach 循环测试
set(my_list hello world china)
foreach(loop_var ${my_list})
     message("${loop_var}")
endforeach()

        打印信息如下:

        2、 foreach 循环之 RANGE 关键字

        用法如下所示:

foreach(loop_var RANGE stop)
foreach(loop_var RANGE start stop [step])

        对于第一种方式,循环会从 0 到指定的数字 stop,包含 stop,stop 不能为负数。

        而对于第二种,循环从指定的数字 start 开始到 stop 结束,步长为 step,不过 step 参数是一个可选参数, 如果不指定,默认 step=1;三个参数都不能为负数,而且 stop 不能比 start 小。

        接下来我们进行测试,测试一:

# foreach 循环测试
foreach(loop_var RANGE 4)
     message("${loop_var}")
endforeach()

        打印信息如下:

         测试二:

# foreach 循环测试
foreach(loop_var RANGE 1 4 1)
    message("${loop_var}")
endforeach()

        打印信息如下:

         3、foreach 循环之 IN 关键字

        用法如下:

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

        循环列表中的每一个元素,或者直接指定元素。

        接下来进行测试,测试一:

# foreach 循环测试
set(my_list A B C D)

foreach(loop_var IN LISTS my_list)
    message("${loop_var}")
endforeach()

        打印信息如下:

         测试二:

# foreach 循环测试
foreach(loop_var IN ITEMS A B C D)
    message("${loop_var}")
endforeach()

        打印信息同上。

while 循环

        while 循环用法如下:

while(condition)
 command1(args ...)
 command1(args ...)
 ...
endwhile(condition)

        endwhile 括号中的 condition 可写可不写,如果写了,就必须和 while 中的 condition 一致。

        cmake 中 while 循环的含义与 C 语言中 while 循环的含义相同,但条件 condition 为真时,执行循环体中的命令,而条件 condition 的语法形式与 if 条件判断中的语法形式相同。

# while 循环测试
set(loop_var 4)
while(loop_var GREATER 0)
    message("${loop_var}")
    math(EXPR loop_var "${loop_var} - 1")
endwhile()

        输出结果如下:

         上例中,while 循环的条件是(loop_var GREATER 0),等价于(loop_var > 0),当 loop_var 变量的有效数值大于 0 时,执行 while 循环体;在 while 循环体中使用到了 cmake 中的数学运算命令 math()。

        在 while 循环体中,打印 loop_var,之后将 loop_var 减一。

break、continue

        cmake 中,也可以在循环体中使用类似于 C 语言中的 break 和 continue 语句。

        1、break

        break()命令用于跳出循环,和在 C 语言中的作用是一样的,测试如下:

# while...break 测试
set(loop_var 10)

while(loop_var GREATER 0) #loop_var>0 时 执行循环体
    message("${loop_var}")
    if(loop_var LESS 6) #当 loop_var 小于 6 时
         message("break")
         break() #跳出循环
    endif()
    math(EXPR loop_var "${loop_var} - 1")#loop_var--
endwhile()

        打印信息如下:

         2、continue

        continue()命令用于结束本次循环,执行下一次循环,测试如下:

# while...continue 测试
# 打印所有偶数
set(loop_var 10)

while(loop_var GREATER 0) #loop_var>0 时 执行循环体
     math(EXPR var "${loop_var} % 2") #求余

     if(var EQUAL 0) #如果 var=0,表示它是偶数
         message("${loop_var}") #打印这个偶数
         math(EXPR loop_var "${loop_var} - 1")#loop_var--
         continue() # 执行下一次循环
     endif()

     math(EXPR loop_var "${loop_var} - 1")#loop_var--
endwhile()

        这段 cmake 代码是求 0 到 10 之间的偶数(左闭右开),并将偶数打印出来,使用到了 continue()命令, 代码不再解释,注释已经写得很清楚了。 打印结果如下:

         关于 break()和 continue()命令的使用就介绍到这里了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/652812.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt赋能python:Python编写计算器的方法

Python编写计算器的方法 介绍 计算器是一款常见的实用工具,它能够进行基本的算数运算,如加减乘除等。在Python中,我们可以利用各种库和函数来实现计算器的功能,从而方便地进行数值计算。 怎么编写计算器 在Python中&#xff0…

WINS服务的作用和效率

WINS服务的作用和效率 目录 WINS服务的作用和效率 一、WINS服务 二、配置 2.1、服务端 2.2、客户端 2.3、配置方法 三、效果 3.1、计算机-网络(过去的“网上邻居”) 3.2、局域网打印机共享 3.3、基于NetBios名称的数据库客户端连接 一、WINS服…

爆肝万字带你超级详细全面了解Linux命令大全

🍁前言 👑作者主页:👉CSDN丨博客园 🏆学习交流:👉在下周周ovoの社区 对这篇万字博客目录总结如下: 关机命令、重启命令,创建用户、删除用户、修改密码、切换用户、切换到…

Centos8 如何给磁盘扩容

今天发现 在home目录下无法写入文件,经过查看磁盘空间,发现/dev/mapper/cl-home空间满了。于是乎,给磁盘进行扩容,扩充成功,下面将操作步骤分享出来。 查看空间 [rootasrcent8 ~]# df -k 文件系统 1K…

jsp与java bean

软件开发应具有较高的可维护性,以方便后续的代码维护,而实现高可维护性的有效途径是要实现软件的低耦合、高内聚。软件设计分层的概念主要就是将软件各部分进行解耦合设计,对于JSP动态开发技术而言, JavaBean是最基础的分层技术。…

Java集合框架:栈、Stack详解

目录 一、栈 二、栈的使用 1. Stack类 2. 栈的模拟实现 三、栈的应用场景 1. 改变元素的序列 2. 将递归转化为循环(如:逆序打印链表) 3. 栈的oj题练习(oj题中都用到了栈这种数据结构) 四、栈,虚拟机…

Stable diffusion webui 本地安装教学

Stable diffusion AI的绘图工具,这是一种扩散模型,可以通过不断去噪来获得最终的艺术作品。这款工具是当前最受欢迎的AI绘图工具之一,不仅是还是开源的,而且其中的AUTOMATIC111 Stable-diffusion-webui版本深受AI绘图玩家的喜爱&a…

三、Docker的基本组成和常用命令(一)

文章目录 Docker的基本组成镜像(image)容器(container)仓库(repository)总结 Docker的常用命令帮助命令镜像命令docker imagesdocker searchdocker pulldocker rmi Docker的基本组成 镜像(image) Docker 镜像(Image)就是一个只读的模板。镜像可以用来创…

用Netty自己实现Dubbo RPC

1.RPC基本介绍 1>.RPC(Remote Procedure Call)— 远程过程调用,是一个计算机通信协议.该协议允许运行在一台计算机中的程序调用另一台计算机的子程序,而程序员无需额外地为这个交互作用编程; 2>.两个或多个应用程序都分布在不同的服务器上,它们之间的调用都像是本地方法…

跟着《代码随想录》练习代码

更新中。。。有错误请指正 数组 二分查找704 class Solution:def search(self,nums:list,target:int)->int:left 0right len(nums)-1while left<right:mid (leftright)//2guess nums[mid]if guess target:return midbreakelif guess > target:right mid -1els…

浅析浏览器的缓存

随着浏览器功能的日益强大&#xff0c;在工作中&#xff0c;浏览器是前端工程师们最重要的战友和开发调试工具&#xff0c;它承载着用户最舒适的用户体验&#xff0c;ui最佳的设计成果展示&#xff0c;后台数据最直观的展示。因此&#xff0c;对浏览器的认识和理解起到举足轻重…

使用pipe、select实现线程间通信和性能测试

一 代码实现 理论依据&#xff1a; 管道中无数据时&#xff0c;读阻塞。 写数据时&#xff0c;长度小于PIPE_BUF时&#xff0c;写数据是原子操作&#xff0c;这样不会出现写一半的情况。在我的虚拟机上PIPE_BUF的值是4096&#xff0c;在标准中linux系统中该值都是4096. 测试代…

小型极简主义 Linux 发行版:Peropesis

导读Peropesis 是 personal operating system 的转写简拼&#xff0c;一个小型、极简主义、基于命令行的 Linux 操作系统。目前仍是一个不完整的系统&#xff0c;但它正在不断改进。 此外&#xff0c;它是一个由自由软件创建的自由操作系统&#xff0c;在 GNU GPL 或 BSD 许可下…

csdn编辑模式

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

非授权访问测试-业务安全测试实操(9)

非授权访问测试, 越权测试 非授权访问测试 测试原理和方法 非授权访问是指用户在没有通过认证授权的情况下能够直接访问需要通过认证才能访问到的页面或文本信息。可以尝试在登录某网站前台或后台之后,将相关的页面链接复制到其他浏览器或其他电脑上进行访问,观察是否能访…

第二届BSN全球技术创新发展峰会在武汉成功举行

6月9日&#xff0c;由湖北省人民政府指导&#xff0c;湖北省发展改革委、国家信息中心联合主办&#xff0c;中国移动、中国电信、中国联通、武汉市江汉区人民政府、区块链服务网络&#xff08;BSN&#xff09;发展联盟、湖北省楚天云公司承办的第二届区块链服务网络&#xff08…

汽车功能安全中CPU lockstep技术浅析

知识的价值在于分享&#xff0c;欢迎大家批评指正&#xff0c;共同进步。 目录 1 功能安全 2 技术特性 3 安全系统架构 4 TI Hercules系列 4.1 TMS570安全概念基本原理 4.1.1 1oo1D双核安全概念 4.1.2 1oo1D优势 总结 参考文献 1 功能安全 根据ISO26262-2018&#xff0…

CVPR 2023 | 计算机视觉顶会亮点前瞻

在知识和技术都迅速更新迭代的计算机领域中&#xff0c;国际计算机视觉与模式识别会议&#xff08;CVPR&#xff09;是计算机视觉方向的“顶级流量”&#xff0c;引领着学科及相关领域的研究潮流。今天我们为大家带来5篇微软亚洲研究院被 CVPR 2023 收录的论文&#xff0c;主题…

【Linux】MySQL数据库 (一)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 MySQL数据库 一、数据库的基本概念二、数据库系统发展史1.第一代数据库2.第二代数据库3.第三代数据库 三、当今主流数据库介绍1.关系数据库2.非关系数据库 四、MySQL数据库管…

浅谈中移链中插件的功能及使用

中移链是在满足我国信息化监管需求、合规可控的前提下&#xff0c;打造的中国移动区块链服务平台。它允许使用插件来扩展其功能&#xff0c;以适应各种不同的使用场景。 什么是中移链插件呢&#xff1f;如果把中移链比作一个操作系统&#xff0c;那么插件就类比于操作系统上的…