cmake列表

news2024/9/27 5:50:10

 目录

cmake多行注释

求list长度

demo 

获取list的值

demo

 插入list

demo

 追加list

demo

查找列表中的字符

demo

删除list

list向前删除和向后删除数据

demo

字符串反转

demo

特殊操作


Reading
  list(LENGTH <list> <out-var>)
  list(GET <list> <element index> [<index> ...] <out-var>)
  list(JOIN <list> <glue> <out-var>)
  list(SUBLIST <list> <begin> <length> <out-var>)

Search
  list(FIND <list> <value> <out-var>)

Modification
  list(APPEND <list> [<element>...])
  list(FILTER <list> {INCLUDE | EXCLUDE} REGEX <regex>)
  list(INSERT <list> <index> [<element>...])
  list(POP_BACK <list> [<out-var>...])
  list(POP_FRONT <list> [<out-var>...])
  list(PREPEND <list> [<element>...])
  list(REMOVE_ITEM <list> <value>...)
  list(REMOVE_AT <list> <index>...)
  list(REMOVE_DUPLICATES <list>)
  list(TRANSFORM <list> <ACTION> [...])

Ordering
  list(REVERSE <list>)
  list(SORT <list> [...])

cmake多行注释

#[==[
sadf
asdafg
asdafg
]==]

#[==[

]==]

这个是多行注释的写法中间的两个等号可以换成其他的,但是一定要和后面的字符匹配才可以.

求list长度

第一个参数是关键字 第二个参数是list,第三个参数输出的长度值

list(LENGTH <list> <out-var>)

demo 

先设置三个list,list可以使用分号区分也可以使用空格区分,注意使用空格区分不能使用双引号,要不会识别为一个字符串,list长度为了,分号没有限制.

message("---------------------------------------------")
#[==[
sadf
asdafg
asdafg
]==]

set(listVar0 "1;2;3;4;5")
set(listVar1 "1 2 3 4 5")
set(listVar2 1 2 3 4 5)
set(listVar3 1;2;3;4;5)
list(LENGTH listVar0 outVar0)
list(LENGTH listVar1 outVar1)
list(LENGTH listVar2 outVar2)
list(LENGTH listVar3 outVar3)
message("outVar0 = ${outVar0}\n"
        "outVar1 = ${outVar1}\n"
        "outVar2 = ${outVar2}\n"
        "outVar3 = ${outVar3}\n")

 

获取list的值

 list(GET <list> <element index> [<index> ...] <out-var>)

第一个参数是必填的,这个GET是获取的意思,第二个参数是list,第三个变量是index是list的下标,而且可以不只是一个,第四个参数是输出,如果是两个index输出的是一个列表.如果超出会报错,如果为负数会从后往前数,看下面的例子,list中有5个元素,所以范围是-5到4.

demo

list(GET listVar0 0 outVar0)
list(GET listVar0 0 3 outVar1)
list(GET listVar0 -4 outVar2)
list(GET listVar0 0 6 outVar3)
message("outVar0 = ${outVar0}\n"
        "outVar1 = ${outVar1}\n"
        "outVar2 = ${outVar2}\n"
        "outVar3 = ${outVar3}\n")

 

 插入list

list(INSERT listVal index item[item...])

第一个参数是关键字插入,第二个是插入的位置,第三个参数是插入的内容,可以是字符串也可以是list

demo

第一行代码是插入三个字符,

第二行代码是插入一个字符串

第三行代码是插入两个字符

第四行代码是从后往前数插入,

第五行代码是插入一个list,插入list必须使用${}如果直接使用list名字,会把list名字当成字符串处理的.

list(INSERT listVar0 0 "H" "E" "X")
list(INSERT listVar2 1 "asd")
list(INSERT listVar3 2 123 456)
list(INSERT listVar3 -3 "poi")
list(INSERT listVar3 -1 ${listVar0})
message("listVar0 = ${listVar0}\n"
        "listVar2 = ${listVar2}\n"
        "listVar3 = ${listVar3}\n")

 

 追加list

list(APPEND <list> [<element>...])
list(PREPEND <list> [<element>...])

APPEND:向后追加

PREPEND :向前追加

第一个参数是关键字,第二个是追加的列表,第三个参数是追加的内容,内容可以是单个字符多个字符,字符串或者列表,列表需要使用${}包含.

demo

set(listVar0 "1;2;3;4;5")
set(listVar1 "1;2;3;4;5")
set(listVar2 1 2 3 4 5)
set(listVar3 1;2;3;4;5)


list(APPEND listVar0 "c" "m" "k" "e")
list(PREPEND listVar1 "Hello")
list(APPEND listVar3 ${listVar2})
message("listVar0 = ${listVar0}\n"
        "listVar1 = ${listVar1}\n"
        "listVar3 = ${listVar3}\n")

 

查找列表中的字符

list(FIND <list> <value> <out-var>)

list查找是能查找单个字符,或者单个字符串,如果没找会返回-1

demo

第一行代码,第二行代码查找字符和字符串都可以找到,第三行代码查找没找到会返回-1,第四行代码查找list但是返回-1. 

set(listVar0 "1;2;3;4;5")
set(listVar1 "1;12;3;4;5")
set(listVar2 1 2 3 4 5)
set(listVar3 1;2;3;4;5)

list(FIND listVar0 "2" outVar0)
list(FIND listVar1 "12" outVar1)
list(FIND listVar2 "9" outVar2)
list(FIND listVar3 "1;2" outVar3)
message("outVar0 = ${outVar0}\n"
        "outVar1 = ${outVar1}\n"
        "outVar2 = ${outVar2}\n"
        "listVar3 = ${listVar3}  outVar3 = ${outVar3}\n"
        )

删除list

  list(REMOVE_ITEM <list> <value>...)
  list(REMOVE_AT <list> <index>...)
  list(REMOVE_DUPLICATES <list>)

REMOVE_ITEM 移除list的内容匹配的是内容

REMOVE_AT 移除的list的下标

REMCOVE_DUPLICATES 移除的是重复的内容

第一行代码是移除字符1和字符2

第二行代码是移除下标3和下标4

第三行代码是移除listVar2重复的内容

第四行代码是是移除字符1和字符7,但是没有字符7所以只移除了字符1,但是不会报错

第五行代码是移除下标3和下标9,有下标3,但是没有下标9所以会报错.

set(listVar0 "1;2;3;4;5")
set(listVar1 "1;12;3;4;5")
set(listVar2 1 2 3 1 5)
set(listVar3 1;2;3;4;5)
set(listVar4 1;2;3;4;5)
list(REMOVE_ITEM listVar0 "1" "2")
list(REMOVE_AT listVar1 "3" "4")
list(REMOVE_DUPLICATES listVar2)
list(REMOVE_ITEM listVar3 "1" "7")
list(REMOVE_AT listVar4 "3" "9")
message("listVar0 = ${listVar0}\n"
        "listVar1 = ${listVar1}\n"
        "listVar2 = ${listVar2}\n"
        "listVar3 = ${listVar3}\n"
        "listVar4 = ${listVar4}\n"
        )

 

list向前删除和向后删除数据

  list(POP_BACK <list> [<out-var>...])
  list(POP_FRONT <list> [<out-var>...])

POP_BACK是从后面删除数据

POP_FRONT是从先面删除数据

第二个参数是删除的list

第三个参数是删除的内容,一个参数就删除一个两个参数就删除两个

和c++的操作类似.

demo

set(listVar0 "1;2;3;4;5")
set(listVar1 "1;12;3;4;5")
set(listVar2 1 2 3 1 5)
set(listVar3 1;2;3;4;5)
set(listVar4 1;2;3;4;5)
message("listVar0 = ${listVar0}\n"
        "listVar1 = ${listVar1}\n"
        "listVar2 = ${listVar2}\n"
        "listVar3 = ${listVar3}\n"
        # "listVar4 = ${listVar4}\n"
        )
list(POP_FRONT listVar0 outVar0)
list(POP_FRONT listVar1 outVar1 outVar2)
list(POP_BACK listVar2 outVar3)
list(POP_BACK listVar3 outVar5 outVar6)

message("--------POP_FRONT-----------------\n"
        "listVar0 = ${listVar0}\n"
        "outVar0 = ${outVar0}\n"
        "--------POP_FRONT-----------------\n"
        "listVar1 = ${listVar1}\n"
        "outVar1 = ${outVar1}\n"
        "outVar2 = ${outVar2}\n"
        "--------POP_BACK-----------------\n"
        "listVar2 = ${listVar2}\n"
        "outVar3 = ${outVar3}\n"
        "--------POP_BACK-----------------\n"
        "listVar3 = ${listVar3}\n"
        "outVar5 = ${outVar5}\n"
        "outVar6 = ${outVar6}\n"
)

 

字符串反转

  list(REVERSE <list>)
  list(SORT <list> [COMPARE method] [CASE case] [OREDER order])
  • REVERSE是逆序
  • SORT是排序

method必须是如下之一:比较的方法

  • STRING
  • FILE_BASENAME  #比较的是路径
  • NATURAL和STRING类似,只不过连续的数字需要按照数字的大小来排序

CASE是SENSITIVE(大小写敏感)或者INSENSITIVE(大小写不敏感)

ORDER是ASCENDING(升序)或者是DESCENDING(降序)

demo

message("-------------------------------")
set(listVar "1;2;3;q;w;e;r;Q;W;E;R")
message("listVar = ${listVar}\n")
list(SORT listVar)
message("listVar = ${listVar}\n")
list(SORT listVar COMPARE STRING)
message("COMPARE STRING: listVar = ${listVar}\n")
list(SORT listVar COMPARE NATURAL)
message("COMPARE NATURAL: listVar = ${listVar}\n")
list(SORT listVar CASE SENSITIVE)
message("CASE SENSITIVE: listVar = ${listVar}\n")
list(SORT listVar CASE INSENSITIVE)
message("CASE INSENSITIVE: listVar = ${listVar}\n")
list(SORT listVar COMPARE NATURAL CASE SENSITIVE)
message("COMPARE NATURAL CASE SENSITIVE: listVar = ${listVar}\n")
list(SORT listVar COMPARE NATURAL CASE INSENSITIVE)
message("COMPARE NATURAL CASE INSENSITIVE: listVar = ${listVar}\n")
message("CASE SENSITIVE: listVar = ${listVar}\n")
list(SORT listVar ORDER ASCENDING)
message("ORDER ASCENDING: listVar = ${listVar}\n")
list(SORT listVar ORDER DESCENDING)
message("ORDER DESCENDING: listVar = ${listVar}\n")

 

特殊操作

在设置[为字符时需要注意这个可能会把两个字符组合成一个字符的. 


message("-------------------------------")
set(noBrackets "a_a" "b_b")
set(withBrackets "a[a" "b]b")

list(LENGTH noBrackets lenNo)
list(LENGTH withBrackets lenWith)

list(GET noBrackets 0 firstNo)
list(GET withBrackets 0 firstWith)

message("No brackets: Length = ${lenNo} --> first element = ${firstNo}")
message("with brackets: Length = ${lenWith} --> first element = ${firstWith}")

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

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

相关文章

STM32CubeMX开发实战1-LED点灯

目录 点灯选择 MCU引脚设置时钟设置项目配置生成项目项目文件介绍Debugger 设置 点灯 这里将会以一个最简单的一个点灯实验来展示如何使用 STM32CubeMX 快速生成 STM32 工程并上手开发&#xff0c;包括对项目工程建立的详细内容分析解释 接下来使用正点原子探索者开发板 STM32F…

101、基于STM32单片机智能输液器红外点滴液位监控报警系统设计(程序+原理图+PCB源文件+参考论文+硬件设计资料+元器件清单等)

单片机主芯片选择方案 方案一&#xff1a;AT89C51是美国ATMEL公司生产的低电压&#xff0c;高性能CMOS型8位单片机&#xff0c;器件采用ATMEL公司的高密度、非易失性存储技术生产&#xff0c;兼容标准MCS-51指令系统&#xff0c;片内置通用8位中央处理器(CPU)和Flash存储单元&a…

Python程序设计

很多刚接触Python的同学会觉得Python就和shell语言一样&#xff0c;是一门脚本语言&#xff0c;并不需要设计&#xff0c;只需要关注要实现的功能。确实一门计算机语言的诞生就是为了去更好的解决当前的痛点&#xff0c;功能实现肯定是第一位的。但是如何在功能实现的前提下&am…

【人工智能】您必须了解的最佳聊天机器人框架

在本博客中&#xff0c;我们将讨论 7 大聊天机器人开发框架。 聊天机器人现在已成为许多企业不可或缺的一部分。他们利用聊天机器人提供客户支持服务。聊天机器人增强了人工代理以提供客户服务支持。企业每天都会收到大量查询。手动回答这些问题不仅耗时&#xff0c;而且还会增…

数据结构--由遍历序列构造二叉树

数据结构–由遍历序列构造二叉树 不同二叉树的中序遍历序列 中序遍历:中序遍历 左 \color{red}左 左子树、 根 \color{purple}根 根结点、中序遍历 右 \color{green}右 右子树 中序遍历序列:BDCAE 结论 : 一个中序遍历序列可能对应多种二叉树形态 \color{green}结论:一个中序…

4.4 x64dbg 绕过反调试保护机制

在Windows平台下&#xff0c;应用程序为了保护自己不被调试器调试会通过各种方法限制进程调试自身&#xff0c;通常此类反调试技术会限制我们对其进行软件逆向与漏洞分析&#xff0c;下面是一些常见的反调试保护方法&#xff1a; IsDebuggerPresent&#xff1a;检查当前程序是…

OpenCV 入门教程:图像读取和显示

OpenCV 入门教程&#xff1a;图像读取和显示 导语一、图像读取1.1、导入 OpenCV 库1.2、读取图像文件1.3、图像读取的返回值 二、图像显示2.1、创建窗口2.2、图像显示2.3、等待按键2.4、关闭窗口 三、示例应用总结 导语 在计算机视觉和图像处理领域&#xff0c;读取和显示图像…

非局部均值滤波(磨皮)

note 根据掩膜区域与其他区域的相似程度来赋予掩膜区域像素权重 相似程度由均方差来衡量 code /*\brief 矩阵求邻和\param type1&#xff0c;列方向&#xff1b;type2&#xff0c;行方向 */ static void MyCumSum(Mat& src, Mat& res, int type) {if ((src.channel…

关于impacket套件中的atexec.py在使用的时候报error: unrecognized arguments: 的解决方案

定位到库文件C:\Users\LC\AppData\Local\Programs\Python\Python311\Lib\argparse.py 加一个return args就行了 用完记得改回来&#xff0c;不然会影响其他脚本的功能

算法分析和设计选择和判断

算法分析和设计选择和判断 目录 平时测试 1.算法概述 1.1渐进符号的概念 1.2求时间复杂度 1.3比较时间复杂度 1.4时间复杂度定义 1.5算法的有效性 1.6算法的性质 1.7顺序搜索法 1.8渐进算法分析 2.递归和分治策略 2.1归并排序 2.2归并的空间复杂度 2.3插入排序 2.4递归 2.5归并…

Docker容器与HSM整合的好处

Docker透过容器使创建、部署和运行应用程式变得更加容易。容器允许开发人员可以将一个应用程式与它所需要的所有部分封包&#xff0c;然后将应用程式及其组件作为一个单一的套装软体。 Docker面临的挑战 : ● 遭受特权用户滥用的风险 Docker环境或容器内的权限配置不当可能会导…

Redis常见数据结构

文章目录 前言一、Redis通用命令二、String类型三、Key的层级结构四、Hash类型五、List类型六、Set类型七、SortedSet类型 前言 Redis是一个key-value的数据库&#xff0c;key一般是String类型&#xff0c;但是value的类型多种多样 在学习Redis不同数据类型时&#xff0c;我们…

ChatGPT付费创作系统V2.1.0独立版 +WEB端+ H5端 + 小程序端+文心一言

ChatGPT付费创作系统V2.1.0提供最新的对应版本小程序端&#xff0c;上一版本增加了PC端绘画功能&#xff0c;绘画功能采用其他绘画接口-意间AI&#xff0c;本版新增了百度文心一言接口。后台一些小细节的优化及一些小BUG的处理&#xff0c;前端进行了些小细节优化&#xff0c;针…

C#学习之路-类型转换

类型转换从根本上说是类型铸造&#xff0c;或者说是把数据从一种类型转换为另一种类型。 C# 中的类型转换可以分为两种&#xff1a;隐式转换和显式转换。 隐式类型转换 隐式转换是指将一个较小范围的数据类型转换为较大范围的数据类型时&#xff0c;编译器会自动完成类型转换…

chatgpt生成pygame opengl实现旋转用图片填充的3d三角形

import pygame from pygame.locals import * from OpenGL.GL import * from OpenGL.GLU import *def draw_triangle():vertices ((0, 2, 0), # 顶点1(-2, -2, 0), # 顶点2(2, -2, 0) # 顶点3)tex_coords ((1, 2), # 顶点1的纹理坐标(1, 1), # 顶点2的纹理坐标(2, …

如何使用SU插件一键生成通道图

如何使用SU插件一键生成通道图 通道图有什么作用&#xff1f; 以材质ID为例&#xff0c;最大的作用就是在PS通过选择材质ID图上的颜色&#xff0c;将颜色区域转化为蒙版&#xff0c;进而可以调节颜色区域所对应的效果图区域&#xff0c;原理类似于PS自带的通道&#xff1a;而A…

css 3D Demo

<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title></title> <style> body{ /* 该属性必须在父或大于父的级别上添加,保证其子,孙等盒子可以以3D视角…

langchain调用chatGLM2纪实

一、科学上网要注意&#xff1a; 域名全代和全局代理&#xff08;网卡&#xff09;&#xff0c;都要打开。这样conda install特别快。 二、安装langchain 1、 conda install langchain 2、 conda install openai 注意&#xff1a; 使用pip install和conda install 是不同…

mysql如何运行 mysql 基本命令

一、 mysql如何运行 1. 成功安装mysql 点击进入–》如何安装 2. 确保mysql服务启动&#xff1a; 按下win&#xff0c;输入服务&#xff0c;然后找到mysql&#xff0c;启动服务&#xff1a; 3. 配置环境变量&#xff08;可跳过&#xff09; 点击进入–》如何配置环境变量…

SpringBoot项目出现Failed to configure a DataSource错误时解决方法

若在运行SpringBoot项目时&#xff0c;出现如下错误&#xff1a; Description:Failed to configure a DataSource: url attribute is not specified and no embedded datasource could be configured.Reason: Failed to determine a suitable driver classAction:Consider the…