获取各个子表达式的匹配结果,即捕获组 单次正则匹配
1 2 3 4
| string(REGEX MATCH < 正则表达式 > < 结果变量 > < 输入字符串 > [< 输入字符串 >...] )
|
全部正则匹配
1 2 3 4
| string(REGEX MATCHALL < 正则表达式 > < 结果变量 > < 输入字符串 > [< 输入字符串 >...] )
|
结果以列表的形式存入 < 结果变量中 >
正则替换
1 2 3 4
| string(REGEX REPLACE < 正则表达式 > < 替换表达式 > < 结果变量 > < 输入字符串 > [< 输入字符串 >...] )
|
捕获组变量
捕获组(capture group)即正则表达式中子表达式匹配的结果。
捕获组可以在正则替换的替换表达式中通过反斜杠语法来访问。
除此之外,捕获组还可以在正则匹配后通过 CMake 的预定义变量来访问。
相关的预定义变量如下:
CMAKE_MATCH_COUNT
其值为捕获组的数量CMAKE_MATCH_<n>
其值为第 n 个捕获组的匹配内容CMAKE_MATCH_<n>
当 n 为 0 时,其值为正则匹配的完整结果而非子表达式匹配的结果
这些变量会在正则匹配后被 CMake 赋值,这包括:
- 单次正则匹配后
- 全部正则匹配后(对应最后一次正则匹配的捕获组)
- 正则替换后(对应最后一次正则匹配的捕获组)
- 字符串匹配条件判断后(即 if(< 字符串变量 > MATCHES < 正则表达式 >))
列表操作 list
索引
list(GET < 列表变量 > < 元素索引 > [< 元素索引 >…] < 结果变量 >)
搜索
list(FIND < 列表变量 > < 搜索值 > < 结果变量 >)
长度
list(LENGTH < 列表变量 > < 结果变量 >)
追加
list(APPEND < 列表变量 > [< 元素值 >…])
前插
list(PREPEND < 列表变量 > [< 元素值 >…])
插入
list(INSERT < 列表变量 > < 插入索引 > [< 元素值 >…])
弹出末尾
list(POP_BACK < 列表变量 > [< 结果变量 >…])
弹出头部
list(POP_FRONT < 列表变量 > [< 结果变量 >…])
索引移除
list(REMOVE_AT < 列表变量 > < 索引 > [< 索引 >…])
移除元素值
list(REMOVE_ITEM < 列表变量 > < 值 > [< 值 >…])
移除重复元素
list(REMOVE_DUPLICATES < 列表变量 >)
连接列表
list(JOIN < 列表变量 > < 分隔字符串 > < 结果变量 >)
取子列表
list(SUBLIST < 列表变量 > < 起始索引 > < 截取长度 > < 结果变量 >)
列表筛选
list(FILTER < 列表变量 > <INCLUDE|EXCLUDE> REGEX < 正则表达式 >)
翻转列表
list(REVERSE < 列表变量 >)
排序列表
list(SORT < 列表变量 > [COMPARE < 排序依据 >] [CASE < 大小写敏感 >] [ORDER < 排序方向 >])
- 排序依据
- STRING 字典序 缺省值
- FILE_BASENAME 按路径排序
- NATURAL 自然序
- 大小写敏感
- SENSITIVE 启用大小写敏感 缺省值
- INSENSITIVE 关闭
- 排序方向
- ASCENDING 升序 缺省值
- DESCENDING 降序
变换操作
list(TRANSFORM < 列表变量 > < 变换操作 > [< 元素选择器 >] [OUTPUT_VARIABLE < 结果变量 >])
也就是把列表元素当作字符串处理
元素选择器
元素选择器用于在列表中选择需要被变换的元素,可以是下列三种元素选择器之一
list(TRANSFORM … AT < 索引 > [< 索引 >…] …)
list(TRANSFORM … FOR < 起始索引 > < 终止索引 > [< 索引步进 >] …)
list(TRANSFORM … REGEX < 正则表达式 > …)
执行程序 execute_process
同其他脚本程序一样,
CMake 脚本程序中也常常需要执行外部程序,
以进一步扩展 CMake 功能。
CMake 提供了用于执行程序(进程)的命令 execute_process,
使用起来非常简单,
功能也很完备。
其命令形式如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| execute_process(COMMAND < 命令1> [< 命令行参数 >...] [COMMAND < 命令2> [< 命令行参数 >...]]... [WORKING_DIRECTORY < 工作目录 >] [TIMEOUT < 超时秒数 >] [RESULT_VARIABLE < 返回值变量 >] [RESULTS_VARIABLE < 返回值列表变量 >] [OUTPUT_VARIABLE < 标准输出变量 >] [ERROR_VARIABLE < 标准错误输出变量 >] [INPUT_FILE < 标准输入文件路径 >] [OUTPUT_FILE < 标准输出文件路径 >] [ERROR_FILE < 标准错误输出文件路径 >] [OUTPUT_QUIET] [ERROR_QUIET] [COMMAND_ECHO<STDERR|STDOUT|NONE>] [OUTPUT_STRIP_TRAILING_WHITESPACE] [ERROR_STRIP_TRAILING_WHITESPACE] [ENCODING <NONE|AUTO|ANSI|OEM|UTF8|UTF-8>] [ECHO_OUTPUT_VARIABLE] [ECHO_ERROR_VARIABLE] [COMMAND_ERROR_IS_FATAL <ANY|LAST>] )
|
该命令的参数很多,
后面会分类介绍。
现在重点关注 COMMAND 参数,
它后面跟着想要执行的命令(程序路径)
及其参数。
COMMAND 参数可以多次指定以执行多个命令。
一点小吐槽
关于本章的内容,我只能说一句话。
重温填鸭式教育!
只能说填鸭式有填鸭式的好处,但不多。
其实这一章很多东西,并没有记录下来,因为真的实在是太多了,而且全是简单的一句话介绍命令。
还是到时候查文档吧。
0%