9.cmake(string)

news2025/1/10 23:23:57

目录

1. 基本用法

2. string对于json的操作

3.代码段


1. 基本用法

以下通过截取字符串"begin test cmake string end "中的子串"test cmake string"来串联string中的部分用法,其中包括了FIND,LENGTH,SUBSTRING,STRIP,TOUPPER,REPLACE,正则表达式匹配字符串 等用法。

cmake_minimum_required(VERSION 3.20)
project(string)

#截取字符串"begin test cmake string end"中的子字符串"test cmake string"

set(str "begin test cmake string end")
set(sub_str1 "begin") #查找字符串begin的位置
set(sub_str2 "end") #查找字符串end的位置
string(FIND ${str} ${sub_str1} pos1) #在str中查找begin的位置并存入pos1中
string(FIND ${str} ${sub_str2} pos2) #在str中查找end的位置并存入pos1中
message("FIND ${sub_str1} POS ${pos1}")
message("FIND ${sub_str2} POS ${pos2}")

string(LENGTH ${sub_str1} length_str1) #获取字符串begin的长度
math(EXPR pos1 "${pos1} + ${length_str1}") #将begin的位置加上begin的长度即为字串的起始位置
math(EXPR sub_length "${pos2} - ${pos1}") #求子字符串的长度
string(SUBSTRING ${str} ${pos1} ${sub_length} substr) #提取子字符串存入substr
message("substr: [${substr}]") #加[]是为了看字符串前后有没有空格

string(STRIP ${substr} substr) #去掉空格
message("substr: [${substr}]")

string(TOUPPER ${substr} substr) #转大写
message("substr: [${substr}]")

string(APPEND substr " append001 " " append002 ") #追加字符串
message("substr: [${substr}]")

string(REPLACE "append" "REPLACE" replacestr ${substr}) #替换字符串
message("replacestr: [${replacestr}]")

string(REGEX MATCH "[A-Z]+[0-9]+" regexstr ${replacestr})#正则表达式匹配字符串
message("regexstr: [${regexstr}]")

2. string对于json的操作

#JSON操作
set(tjson [=[
{
	"webs":{
		"web":[
			{
				"name":"cmake",
				"url:":"cmake.org.cn"
			},
			{
				"name":"ffmpeg",
				"url":"ffmpeg.club"
			}
		]
	}
}
]=])

#访问webs->web[0]->name
string(JSON var ERROR_VARIABLE evar GET ${tjson} webs web 0 name)
message("webs->web[0].name = ${var}")

#访问webs->web[1]->url
string(JSON var ERROR_VARIABLE evar GET ${tjson} webs web 1 url)
message("webs->web[1].url = ${var}")

#读取json数组长度
string(JSON web_count ERROR_VARIABLE evar LENGTH ${tjson} webs web)
message("webs->web length = ${web_count} ")

#json的增加,修改和删除
string(JSON out_json  ERROR_VARIABLE evar SET ${tjson} webs web 2 [=[			{
				"name":"cpp",
				"url":"cppds.com"
			}]=])
message("out_json =${out_json}")

string(JSON modify_json  ERROR_VARIABLE evar SET ${tjson} webs web 1 [=[{
				"name":"ffmpeg_modify",
				"url":"cppds.com_modify"
			}]=])
message("modify_json =${modify_json}")

string(JSON remove_json  ERROR_VARIABLE evar REMOVE ${tjson} webs web 0)
message("remove_json =${remove_json}")

3.代码段

CSDN/cmake/9.string at main · kdvictor/CSDN · GitHub

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

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

相关文章

linux搭建ceph集群

linux三节点搭建ceph集群 主机IP主机名称172.26.50.75node1172.26.50.112node2172.26.50.228node3 ceph-mon,ceph-mgr,ceph-mds都搭建在node1上,node2和node3上搭建ceph-osd,每个机器1个osd Ceph是一个分布式的存储系统&#x…

选择排序(直接选择排序和堆排序)

一、直接选择排序 1.基本思想 每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 2.动图展示 3.思路讲解 ①在元素集合array[i]—array[n-1]中选择关键码最大&…

个人博客系统-自动化测试

1、项目背景 1.1技术背景 1)个人博客系统主要是通过前端(HTMLcssjs)后端(SpringBoot)实现的一个博客的基本功能。前端通过jQuery的方式向后端请求数据。后端通过MyBatis从数据库中查询数据响应给前端。 2&#xff0…

天通报警呼叫柱助力宜宾——破汛期河心洲岛通信困境,守护人民群众生命安全

随着主汛期的到来,我国多地遭遇频繁降雨,强降雨或连绵不断的降雨,极易引发山洪、滑坡、泥石流等次生灾害。8月18日23时至20日10时,辽宁省西部地区出现暴雨到大暴雨,葫芦岛市部分乡镇出现特大暴雨。受到强降雨影响&…

Qt-QWidget的windowIcon属性(14)

目录 描述 相关API 使用 并不需要在堆上创建 不要带中文路径 运行观察 不要使用绝对路径 描述 这个其实就是你打开窗口的左上角那个图标,这个就是用来设置那个的 相关API 使用 创建一个新的项目,如下,添加一个设置图片的代码 并不需…

uboot中 fastboot udp 协议分析

注: 1. 本文所分析的fastboot源码不是android下的源码,而是恩智浦芯片厂商在IMX6UL芯片的uboot源码中自己实现的源码,二者不同,请读者注意区分。一些图片是网上找到的,出处不好注明,请见谅。 2. 分析fastbo…

VM——轮廓/快速匹配中的多模版匹配

1、轮廓或者快速匹配中支持建立多个模型,按照从上而下的顺序进行匹配,匹配上了即停止后续模版的匹配。 2、如果要多个模版都参与匹配,则需要打开“全部搜索模式”。 3、延拓阈值 “延拓阈值”,看参数名字不知所云,文档…

CR-NeRF 代码eval.py解析

这段代码是一个用于CR-NeRF(Neural Radiance Fields)模型的推理脚本。它主要用于生成和保存渲染的图像,并计算图像质量的评价指标(如PSNR和SSIM)。以下是对这段代码的详细解析: (1)…

【亚马逊云科技】有手就能做到的Amazon Lightsail快速建站

文章目录 前言一、为什么选择Amazon Lightsail二、创建账号与登录注册亚马逊账号登录控制台 三、创建Amazon Lightsail进入控制台创建实例实例配置查看实例查看网站定制页面 总结 前言 不论是个人名片还是官方网站都离不开网站建设工作。计算机技术经历漫长的发展,…

2024年如何将低质量视频变成高质量视频

创建低质量的视频对您没有好处,尤其是当您打算将这些视频上传到社交媒体帐户时。观众不喜欢观看模糊和低质量的视频,而这个东西没有意义,不会为你的内容增加价值。 那么,您应该如何确保您的社交媒体观众喜欢您的视频内容呢&#x…

企业内部知识库意义何在?怎么搭建?

引言 在知识经济时代,企业竞争力的核心日益转向知识的管理与应用能力。随着企业规模的扩大和业务复杂性的增加,如何高效地收集、整理、存储并分享内部知识,成为了企业持续发展和创新的关键。企业内部知识库应运而生,它不仅帮助企…

自定义注解+拦截器实现,对部分敏感字段的加解密

上一篇,我用的自定义注解AOP的方式,实现敏感字段的加解密,这一篇换个方案,这个方案相比一个方案,节省了一部分的性能开销 第一步:新建自定义注解 /*** 敏感信息类注解*/ Inherited Target({ElementType.TYPE}) Retention(RetentionPolicy.RUNTIME) public interface EnableSe…

tomcat session共享

1. 日志监控工具 安装 tar xf goaccess-1.4.tar.gz cd goaccess-1.4/ yum install GeoIP-devel-1.5.0-13.el7.x86_64.rpm yum install -y ncurses-devel.x86_64 ./configure --enable-utf8 --enable-geoiplegacy make make install2. 使用 goaccess /usr/local/nginx/logs/a…

java多线程(六)关键字Volatile可见性、有序性以及单个变量的原子性

volatile关键字 作用 volatile 是 Java 虚拟机提供的轻量级的同步机制,主要用来确保变量被线程安全地读取和写入。 当一个变量定义为 volatile 后,它具备以下特性: 可见性:确保不同线程对这个变量操作的可见性,即一…

自存实践本地访问 nginx放前端打包好的项目

nginx 部署前端项目_哔哩哔哩_bilibili 将打包好的dits文件放到 配置nginx.conf文件的location 启动命令 start nginx.exe 输入localhost即可访问打包好的项目 nginx的特点 1.静态资源 2.转发 设置代理转发请求 关闭nginx .\nginx.exe -s quit

Kubernetes-Pod调度基础

一.复制控制器(ReplicationController,RC) RC用来确保Pod副本数达到预期值,这样可以确保一个或多个同类Pod总是可用的。可以通过扩缩来增加或减少pod。 (1)示例: vim replicationcontroller-ng…

Codeforces Round 967 (Div. 2)

文章目录 A. Make All Equal题目描述思路代码 B. Generate Permutation题目描述思路代码 C. Guess The Tree题目描述思路代码 A. Make All Equal 题目描述 一个数组,最多实行n-1次,计算最少多少次可以变为同一个数 思路 计算重复次数最多的数&#x…

产业园区数字化转型:面对挑战,我们如何把握机遇加速前行?

在当今数字化的时代浪潮中,产业园区数字化转型已成为推动经济发展和提升竞争力的关键举措。然而,这一进程并非坦途,充满了各种挑战。 产业园区数字化转型面临着技术更新换代快的压力。新技术不断涌现,如物联网、人工智能、大数据…

Mybatis 速通秘籍 节省回顾知识点和学习成本

目录 一、MyBatis简介 1、MyBatis历史 2、MyBatis特性 3、MyBatis下载 4、和其它持久层技术对比 二、搭建MyBatis 1、开发环境 2、创建maven工程 a>打包方式 b>引入依赖 3、创建MyBatis的核心配置文件 4、创建mapper接口 5、创建MyBatis的映射文件 6、通过j…

python学习之路 - python的异常、模块与包

目录 一、python的异常、模块与包1、了解异常2、异常的捕获方法a、捕获基本异常b、捕获指定异常c、捕获多个异常d、捕获异常后的finally 3、异常的传递4、python模块a、定义b、基础语法c、使用方法d、补充 5、python包a、定义b、操作方法c、使用方法 6、安装第三方python包a、命…