cmake之string命令解析

本文详细介绍了CMake中string命令的各种操作,包括查找、替换、正则表达式的应用,以及字符串的连接、大小写转换、长度计算、子串提取等。此外,还涵盖了变量替换、字符串加密和UUID生成等功能,是CMake字符串处理的全面指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

string

查找/替换
查找
string(FIND <string> <substring> <output_variable> [REVERSE])

<string>中查找<substring>,返回值存放于<output_variable>,找到则返回在<string>中的下标,找不到返回-1。默认为首次出现的匹配,如果使用了REVERSE则为最后一次匹配。注:下标从0开始,以字节做为单位,因此遇到中文时下标表示字符编码第一字节的位置。

替换
string(REPLACE <match_string> <replace_string> 
		<output_variable> <input> [<input>...])

从所有<input> ...中查找<match_string>并使用<replace_string>替换,替换后的字符串存放于<output_variable>。多个输入时,先将所有输入连接后,再做查找替换。

正则表达式
查找
string(REGEX MATCH <regular_expression>
       <output_variable> <input> [<input>...])

从所有<input> ...中查找<regular_expression>匹配到的字符串,并存放于<output_variable>,查不到输出为空字符串。多个输入时先连接再做操作。只匹配第一次。

string(REGEX MATCHALL <regular_expression>
       <output_variable> <input> [<input>...])

MATCHALLMATCH类似,区别是会查找所有符合的匹配,并将他们连接起来输出。

替换
string(REGEX REPLACE <regular_expression>
       <replacement_expression> <output_variable>
       <input> [<input>...])

根据正则表达式查找,并替换。找不到则输出为输入字符串。<replacement_expression>可以使用\\1 \\2 ..,\\9来表示()元字符匹配到的字符 。这里使用两个\是因为\要先在字符串中转义,然后在正则匹配中进行转义。

元字符
元字符意义
^匹配字符串开头
$匹配字符串结尾
.匹配任意单个字符
\<char>转义元字符。在字符串中要使用\\<char>
[]匹配括号内任何字符
[^]匹配任何不在括号内的字符
[a-e]表示范围,意义同[abcde]
*匹配0次或多次
+匹配1次或多次
?匹配0次或1次
|或运算符
()保存匹配的子表达式
字符串操作
尾部追加
string(APPEND <string_variable> [<input>...])

将所有<input>连接成一个字符串后,追加于<string_variable>后面,新字符串赋值于<string_variable>

头部追加
string(PREPEND <string_variable> [<input>...])

APPEND相反。将所有<input>连接成一个字符串后,放于<string_variable>前面,新字符串赋值于<string_variable>

连接
string(JOIN <glue> <output_variable> [<input>...])

使用<glue>作为连接符,连接所有<input>,输出于<output_variable>

大小写转换
string(TOLOWER <string> <output_variable>)

<string>转换为小写,输出于<output_variable>

string(TOUPPER <string> <output_variable>)

<string>转换为大写,输出于<output_variable>

长度
string(LENGTH <string> <output_variable>)

计算<string>字节长度,输出于<output_variable>。注:中文这种多字节编码的字符,字节长度大于字符长度。

取子串
string(SUBSTRING <string> <begin> <length> <output_variable>)

<string>中取出<begin>为起始下标,长度为<length>的子串,输出于<output_variable>。注:如果<length>为-1或大于源字符串长度则子串为余下全部字符串。

删除收尾空白字符
string(STRIP <string> <output_variable>)

空白字符包括:空格、tab’\t’、换行’\n’

删除子串中的生成器表达式
string(GENEX_STRIP <string> <output_variable>)
复制字符串
string(REPEAT <string> <count> <output_variable>)

<string>复制<count>个并连接在一起,输出于<output_variable>

比较
string(COMPARE LESS <string1> <string2> <output_variable>) # 输出1:string1 < string2,否则输出0
string(COMPARE GREATER <string1> <string2> <output_variable>)#输出1:string1 > string2,否则输出0
string(COMPARE EQUAL <string1> <string2> <output_variable>) #输出1:string1 = string2,否则输出0
string(COMPARE NOTEQUAL <string1> <string2> <output_variable>)#输出1:string1 != string2,否则输出0
string(COMPARE LESS_EQUAL <string1> <string2> <output_variable>)#输出1:string1 <= string2,否则输出0
string(COMPARE GREATER_EQUAL <string1> <string2> <output_variable>)#输出1:string1 >= string2,否则输出0
字符串加密
string(<HASH> <output_variable> <input>)

根据指定的编码规则,将<input>进行加密编码,输出于<output_variable>

<HASH>可取值如下:MD5、SHA1、SHA224、SHA256、SHA384、SHA512、SHA3_224、SHA3_256、SHA3_384、SHA3_512

转换
数字/字符互转
string(ASCII <number> [<number> ...] <output_variable>)

将ASCii码转为对应的字符,如65转为A,66转为B

string(HEX <string> <output_variable>)

<string>转换为对应的16进制ASii码,如A转为61(61为A十六进制ascii)。

变量替换
string(CONFIGURE <string> <output_variable>
           [@ONLY] [ESCAPE_QUOTES])
# 示例:
set(myVar "test")
string(CONFIGURE "first${myVar}end, next${myVar2}end" POS) #输出POS变量值为"firsttestend, nextend"

<string>字符串中对变量的引用替换为变量值(自定义或系统的),如没有定义变量则取空字符串。

[ESCAPE_QUOTES]表示支持转义字符’\’

_替换
string(MAKE_C_IDENTIFIER <string> <output_variable>)

<string>中所有非字符数字替换为_。如+hello*world()会被替换为_hello_world__

UUID生成
string(UUID <output_variable> NAMESPACE <namespace> NAME <name>
       TYPE <MD5|SHA1> [UPPER])

根据NAMESPACENAME生成一个UUID字符串。其中NAMESPACE必须为UUID格式的字符串。相同的NAMESPACENAME生成的UUID是相同的。

UUID字符串格式xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

[UPPER]表示输出的UUID字符串为大写

TYPE <MD5|SHA1>表示生成UUID时使用的算法。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值