【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介绍