【cmake】list
list
命令list的操作分为读取、查找、修改、排序等四个大类,下面按照这四个类逐一对list的子命令进行介绍。
语法如下:
Reading list(LENGTH
) list(GET
[ ...] ) list(JOIN
) list(SUBLIST
) Search list(FIND
) Modification list(APPEND [
...]) list(FILTER {INCLUDE | EXCLUDE} REGEX
) list(INSERT
[ ...]) list(POP_BACK [
...]) list(POP_FRONT [
...]) list(PREPEND [
...]) list(REMOVE_ITEM
...) list(REMOVE_AT
...) list(REMOVE_DUPLICATES ) list(TRANSFORM
[...]) Ordering list(REVERSE ) list(SORT
[...])
1. 列表的读取
list (LENGTH
说明:
测试用例
cmake_minimum_required (VERSION 3.12.2) project (list_cmd_test) set (list_test a b c d) # 创建列表变量"a;b;c;d" list (LENGTH list_test length) message (">>> LENGTH: ${length}")
输出:
>>> LENGTH: 4
2) GET
:子命令GET用于读取列表中指定索引的的元素,可以指定多个索引。
list (GET
[ ...]
说明:1.
为列表元素的索引,从0开始编号,索引0的元素为列表中的第一个元素;索引也可以是负数,-1
表示列表的最后一个元素,-2
表示列表倒数第二个元素,以此类推。注意:当索引(不管是正还是负)超过列表的长度,运行会报错(list index: XX out of range
)。
为新创建的变量,存储指定索引元素的返回结果,也是一个列表。
1)测试用例
# CMakeLists.txt cmake_minimum_required (VERSION 3.12.2) project (list_cmd_test) set (list_test a b c d) # 创建列表变量"a;b;c;d" list (GET list_test 0 1 -1 -2 list_new) message (">>> GET: ${list_new}")
输出:
# 输出 >>> GET: a;b;d;c
【】FIND
:子命令FIND用于查找列表是否存在指定的元素。
list (FIND
说明:如果列表
中存在
,那么返回
在列表中的索引,如果未找到则返回-1。
# CMakeLists.txt cmake_minimum_required (VERSION 3.12.2) project (list_cmd_test) set (list_test a b c d) # 创建列表变量"a;b;c;d" list (FIND list_test d list_index) message (">>> FIND 'd': ${list_index}") list (FIND list_test e list_index) message (">>> FIND 'e': ${list_index}")
输出:
# 输出 >>> FIND 'd': 3 >>> FIND 'e': -1
修改
【1】APPEND
:子命令APPEND用于将元素追加到列表。
list (APPEND[
...])
说明:用于改变变量 值。
1)测试用例
# CMakeLists.txt cmake_minimum_required (VERSION 3.12.2) project (list_cmd_test) set (list_test a b c d) # 创建列表变量"a;b;c;d" list (APPEND list_test 1 2 3 4) message (">>> APPEND: ${list_test}")
输出:
>>> APPEND: a;b;c;d;1;2;3;4
【2】INSERT
:子命令INSERT用于在指定位置将元素(一个或多个)插入到列表中。
list (INSERT
[ ...])
说明:
为列表指定的位置,如果元素的位置超出列表的范围,会报错。此命令会改变原来列表的值。
1)测试用例
cmake_minimum_required (VERSION 3.12.2) project (list_cmd_test) set (list_test a b c d) # 创建列表变量"a;b;c;d" list (INSERT list_test 0 8 8 8 8) message (">>> INSERT: ${list_test}") list (INSERT list_test -1 9 9 9 9) message (">>> INSERT: ${list_test}") list (LENGTH list_test lenght) list (INSERT list_test ${length} 0) message (">>> INSERT: ${list_test}")
输出:
>>> INSERT: 8;8;8;8;a;b;c;d >>> INSERT: 8;8;8;8;a;b;c;9;9;9;9;d >>> INSERT: 8;8;8;8;a;b;c;9;9;9;9;d;0
【】POP_BACK
:子命令POP_BACK用于将列表中最后元素移除。
list (POP_BACK[
...])
说明:
?
如果未指定输出变量,则仅仅是将原列表的最后一个元素移除。如果指定了输出变量,则会将最后一个元素移入到该变量,并将元素从原列表中移除。如果指定了多个输出变量,则依次将原列的最后一个元素移入到输出变量中,如果输出变量个数大于列表的长度,那么超出部分的输出变量未定义。
1)测试用例
cmake_minimum_required (VERSION 3.12.2) project (list_cmd_test) set (list_test a b c d) # 创建列表变量"a;b;c;d" list (POP_BACK list_test) message (">>> POP_BACK: ${list_test}") list (POP_BACK list_test outvar1 outvar2 outvar3 outvar4) message (">>> POP_BACK: ${list_test}") message (">>> POP_BACK: ${outvar1}、${outvar2}、${outvar3}、${outvar4}")
输出:
>>> POP_BACK: a;b;c;d;e >>> POP_BACK: a >>> POP_BACK: e、d、c、b
作者:Domibaba
链接:https://www.jianshu.com/p/89fb01752d6f
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
【】SORT:用于对列表进行排序。
list (SORT[COMPARE
] [CASE ] [ORDER ])
说明:
COMPARE
:指定排序方法。有如下几种值可选:1)STRING
:按照字母顺序进行排序,为默认的排序方法;2)FILE_BASENAME
:如果是一系列路径名,会使用basename进行排序;3)NATURAL
:使用自然数顺序排序。CASE
:指明是否大小写敏感。有如下几种值可选:1)SENSITIVE
:按照大小写敏感的方式进行排序,为默认值;2)INSENSITIVE
:按照大小写不敏感方式进行排序。ORDER
:指明排序的顺序。有如下几种值可选:1)ASCENDING
:按照升序排列,为默认值;2)DESCENDING
:按照降序排列。
测试用例
# CMakeLists.txt cmake_minimum_required (VERSION 3.12.2) project (list_cmd_test) set (list_test 3 1 1.1 10.1 3.4 9) list (SORT list_test) # 以字母顺序,按照大小写敏感方式,升序排列 message (">>> SORT STRING-SENSITIVE-ASCENDING: ${list_test}") list (SORT list_test COMPARE NATURAL ORDER DESCENDING) # 以自然顺序,降序排列 message (">>> SORT STRING-SENSITIVE-DESCENDING: ${list_test}")
输出:
# 输出 >>> SORT STRING-SENSITIVE-ASCENDING: 1;1.1;10.1;3;3.4;9 >>> SORT STRING-SENSITIVE-DESCENDING: 10.1;9;3.4;3;1.1;1
参考资料
1. cmake官方文档
2. cmake命令之list介绍