CMake 13 列表操作

1 读取列表

CMake中的列表是以分号(;)分隔的一组字符串,可以通过set指令来定义。

set(var a b c d e),这就定义了一个列表a;b;c;d;e。

注意 set(var “a b c d e”)只是定义了一个字符串,并不是列表

列表的长度

list(LENGTH <列表> <输出变量>),把列表的长度读取到输出变量

读取列表中的元素

list(GET <元素索引> [<元素索引> …] 输出变量)

元素索引可正可负,当为正数时,从列表开头开始索引,0开始为第1个元素,当为负数时,从列表结尾开始索引,-1为最后一个元素。读取到的元素值放到输出变量

列表连接成字符串

list(JOIN <列表> <连接符> <输出变量>)

把列表的元素连接成一个字符串,元素之间以指定的连接符分隔。

读取子列表

list(SUBLIST <列表> <开始索引> <子列表个数> 输出变量)

从列表的开始索引起读取指定个数作为子列表返回给输出变量。如果子列表个数为-1,或开始索引+子列表个数大于列表的元素数,则从开始索引到列表结尾一起作为子列表返回给输出变量。

2 搜索列表

CMake中对列表的搜索可以用下面的指令:

list(FIND <列表> <值> <输出变量>)

在列表中搜索给定的值,如果有匹配的,对应索引值存到输出变量中,如果有多个则只取第一个匹配的索引,如果没有匹配的则输出-1.

3 列表的增 删 改

增加元素

list(APPEND <list> [<element> …]) 在列表末尾添加给定元素

list(PREPEND <list> [<element> …]) 在列表开头添加给定元素

list(INSERT <list> <index> [<element>…]) 在列表指定索引位置插入元素

删除元素

list(REMOVE_ITEM <list> [<value> …]) 删除指定元素

list(REMOVE_AT <list> [<index> …]) 删除指定索引位置的元素

list(POP_BACK <list> [<out-var> …]) 删除列表末尾的元素,out-var参数没有的话,只删除一个,否则根据out-var的个数删除相应个数,并把删除的元素赋给out-var

list(POP_FRONT <list> [<out-var> …]) 同POP_BACK只是删除列表开头元素

list(REMOVE_DUPLICATES <list>) 删除重复的元素,只保留第一次发现的那个

按正则表达式保留或去除元素

list(FILTER <list> {INCLUDE|EXCLUDE} REGEX <regex>)

INCLUDE,匹配regex的元素保留,

EXCLUDE的话,匹配regex的元素被删除

4 列表的排序

倒序指令 list(REVERSE <list>)

list(SORT <list> [COMPARE <compare>] [CASE <case>] [ORDER <order>])

compare: STRING,按字母表顺序;FILE_BASENAME,列表中的元素为路径,按路径的基础名排序;NATURAL,按数字顺序排序

case:SENSITIVE,区别大小写;INSENSITIVE,不区别大小写。

order指定升序还是降序:ASCENDING,升序,DESCENDING,降序。

5 列表转换

list(TRANSFORM <列表> <操作> [<选择器>] [OUTPUT_VARIABLE<输出变量>])

所有的操作都是对元素进行操作,如果指定输出变量,则源列表不变,操作后的列表赋给输出变量。

在元素的后面或前面添加指定字符

list(TRANSFORM <列表> <APPEND|PREPEND> <值> …)

把元素变为小写或大写

list(TRANSFORM <列表> <TOLOWER|TOUPPER> <值> …)

删除元素头尾的空白

list(TRANSFORM <列表> STRIP …)

原文地址:https://www.cnblogs.com/merlinzjl/p/13908348.html