目录
cmake多行注释
求list长度
demo
获取list的值
demo
插入list
demo
追加list
demo
查找列表中的字符
demo
删除list
list向前删除和向后删除数据
demo
字符串反转
demo
特殊操作
Reading
list(LENGTH <list> <out-var>)
list(GET <list> <element index> [<index> ...] <out-var>)
list(JOIN <list> <glue> <out-var>)
list(SUBLIST <list> <begin> <length> <out-var>)
Search
list(FIND <list> <value> <out-var>)
Modification
list(APPEND <list> [<element>...])
list(FILTER <list> {INCLUDE | EXCLUDE} REGEX <regex>)
list(INSERT <list> <index> [<element>...])
list(POP_BACK <list> [<out-var>...])
list(POP_FRONT <list> [<out-var>...])
list(PREPEND <list> [<element>...])
list(REMOVE_ITEM <list> <value>...)
list(REMOVE_AT <list> <index>...)
list(REMOVE_DUPLICATES <list>)
list(TRANSFORM <list> <ACTION> [...])
Ordering
list(REVERSE <list>)
list(SORT <list> [...])
cmake多行注释
#[==[
sadf
asdafg
asdafg
]==]
#[==[
]==]
这个是多行注释的写法中间的两个等号可以换成其他的,但是一定要和后面的字符匹配才可以.
求list长度
第一个参数是关键字 第二个参数是list,第三个参数输出的长度值
list(LENGTH <list> <out-var>)
demo
先设置三个list,list可以使用分号区分也可以使用空格区分,注意使用空格区分不能使用双引号,要不会识别为一个字符串,list长度为了,分号没有限制.
message("---------------------------------------------")
#[==[
sadf
asdafg
asdafg
]==]
set(listVar0 "1;2;3;4;5")
set(listVar1 "1 2 3 4 5")
set(listVar2 1 2 3 4 5)
set(listVar3 1;2;3;4;5)
list(LENGTH listVar0 outVar0)
list(LENGTH listVar1 outVar1)
list(LENGTH listVar2 outVar2)
list(LENGTH listVar3 outVar3)
message("outVar0 = ${outVar0}\n"
"outVar1 = ${outVar1}\n"
"outVar2 = ${outVar2}\n"
"outVar3 = ${outVar3}\n")
获取list的值
list(GET <list> <element index> [<index> ...] <out-var>)
第一个参数是必填的,这个GET是获取的意思,第二个参数是list,第三个变量是index是list的下标,而且可以不只是一个,第四个参数是输出,如果是两个index输出的是一个列表.如果超出会报错,如果为负数会从后往前数,看下面的例子,list中有5个元素,所以范围是-5到4.
demo
list(GET listVar0 0 outVar0)
list(GET listVar0 0 3 outVar1)
list(GET listVar0 -4 outVar2)
list(GET listVar0 0 6 outVar3)
message("outVar0 = ${outVar0}\n"
"outVar1 = ${outVar1}\n"
"outVar2 = ${outVar2}\n"
"outVar3 = ${outVar3}\n")
插入list
list(INSERT listVal index item[item...])
第一个参数是关键字插入,第二个是插入的位置,第三个参数是插入的内容,可以是字符串也可以是list
demo
第一行代码是插入三个字符,
第二行代码是插入一个字符串
第三行代码是插入两个字符
第四行代码是从后往前数插入,
第五行代码是插入一个list,插入list必须使用${}如果直接使用list名字,会把list名字当成字符串处理的.
list(INSERT listVar0 0 "H" "E" "X")
list(INSERT listVar2 1 "asd")
list(INSERT listVar3 2 123 456)
list(INSERT listVar3 -3 "poi")
list(INSERT listVar3 -1 ${listVar0})
message("listVar0 = ${listVar0}\n"
"listVar2 = ${listVar2}\n"
"listVar3 = ${listVar3}\n")
追加list
list(APPEND <list> [<element>...])
list(PREPEND <list> [<element>...])
APPEND:向后追加
PREPEND :向前追加
第一个参数是关键字,第二个是追加的列表,第三个参数是追加的内容,内容可以是单个字符多个字符,字符串或者列表,列表需要使用${}包含.
demo
set(listVar0 "1;2;3;4;5")
set(listVar1 "1;2;3;4;5")
set(listVar2 1 2 3 4 5)
set(listVar3 1;2;3;4;5)
list(APPEND listVar0 "c" "m" "k" "e")
list(PREPEND listVar1 "Hello")
list(APPEND listVar3 ${listVar2})
message("listVar0 = ${listVar0}\n"
"listVar1 = ${listVar1}\n"
"listVar3 = ${listVar3}\n")
查找列表中的字符
list(FIND <list> <value> <out-var>)
list查找是能查找单个字符,或者单个字符串,如果没找会返回-1
demo
第一行代码,第二行代码查找字符和字符串都可以找到,第三行代码查找没找到会返回-1,第四行代码查找list但是返回-1.
set(listVar0 "1;2;3;4;5")
set(listVar1 "1;12;3;4;5")
set(listVar2 1 2 3 4 5)
set(listVar3 1;2;3;4;5)
list(FIND listVar0 "2" outVar0)
list(FIND listVar1 "12" outVar1)
list(FIND listVar2 "9" outVar2)
list(FIND listVar3 "1;2" outVar3)
message("outVar0 = ${outVar0}\n"
"outVar1 = ${outVar1}\n"
"outVar2 = ${outVar2}\n"
"listVar3 = ${listVar3} outVar3 = ${outVar3}\n"
)
删除list
list(REMOVE_ITEM <list> <value>...)
list(REMOVE_AT <list> <index>...)
list(REMOVE_DUPLICATES <list>)
REMOVE_ITEM 移除list的内容匹配的是内容
REMOVE_AT 移除的list的下标
REMCOVE_DUPLICATES 移除的是重复的内容
第一行代码是移除字符1和字符2
第二行代码是移除下标3和下标4
第三行代码是移除listVar2重复的内容
第四行代码是是移除字符1和字符7,但是没有字符7所以只移除了字符1,但是不会报错
第五行代码是移除下标3和下标9,有下标3,但是没有下标9所以会报错.
set(listVar0 "1;2;3;4;5")
set(listVar1 "1;12;3;4;5")
set(listVar2 1 2 3 1 5)
set(listVar3 1;2;3;4;5)
set(listVar4 1;2;3;4;5)
list(REMOVE_ITEM listVar0 "1" "2")
list(REMOVE_AT listVar1 "3" "4")
list(REMOVE_DUPLICATES listVar2)
list(REMOVE_ITEM listVar3 "1" "7")
list(REMOVE_AT listVar4 "3" "9")
message("listVar0 = ${listVar0}\n"
"listVar1 = ${listVar1}\n"
"listVar2 = ${listVar2}\n"
"listVar3 = ${listVar3}\n"
"listVar4 = ${listVar4}\n"
)
list向前删除和向后删除数据
list(POP_BACK <list> [<out-var>...])
list(POP_FRONT <list> [<out-var>...])
POP_BACK是从后面删除数据
POP_FRONT是从先面删除数据
第二个参数是删除的list
第三个参数是删除的内容,一个参数就删除一个两个参数就删除两个
和c++的操作类似.
demo
set(listVar0 "1;2;3;4;5")
set(listVar1 "1;12;3;4;5")
set(listVar2 1 2 3 1 5)
set(listVar3 1;2;3;4;5)
set(listVar4 1;2;3;4;5)
message("listVar0 = ${listVar0}\n"
"listVar1 = ${listVar1}\n"
"listVar2 = ${listVar2}\n"
"listVar3 = ${listVar3}\n"
# "listVar4 = ${listVar4}\n"
)
list(POP_FRONT listVar0 outVar0)
list(POP_FRONT listVar1 outVar1 outVar2)
list(POP_BACK listVar2 outVar3)
list(POP_BACK listVar3 outVar5 outVar6)
message("--------POP_FRONT-----------------\n"
"listVar0 = ${listVar0}\n"
"outVar0 = ${outVar0}\n"
"--------POP_FRONT-----------------\n"
"listVar1 = ${listVar1}\n"
"outVar1 = ${outVar1}\n"
"outVar2 = ${outVar2}\n"
"--------POP_BACK-----------------\n"
"listVar2 = ${listVar2}\n"
"outVar3 = ${outVar3}\n"
"--------POP_BACK-----------------\n"
"listVar3 = ${listVar3}\n"
"outVar5 = ${outVar5}\n"
"outVar6 = ${outVar6}\n"
)
字符串反转
list(REVERSE <list>)
list(SORT <list> [COMPARE method] [CASE case] [OREDER order])
- REVERSE是逆序
- SORT是排序
method必须是如下之一:比较的方法
- STRING
- FILE_BASENAME #比较的是路径
- NATURAL和STRING类似,只不过连续的数字需要按照数字的大小来排序
CASE是SENSITIVE(大小写敏感)或者INSENSITIVE(大小写不敏感)
ORDER是ASCENDING(升序)或者是DESCENDING(降序)
demo
message("-------------------------------")
set(listVar "1;2;3;q;w;e;r;Q;W;E;R")
message("listVar = ${listVar}\n")
list(SORT listVar)
message("listVar = ${listVar}\n")
list(SORT listVar COMPARE STRING)
message("COMPARE STRING: listVar = ${listVar}\n")
list(SORT listVar COMPARE NATURAL)
message("COMPARE NATURAL: listVar = ${listVar}\n")
list(SORT listVar CASE SENSITIVE)
message("CASE SENSITIVE: listVar = ${listVar}\n")
list(SORT listVar CASE INSENSITIVE)
message("CASE INSENSITIVE: listVar = ${listVar}\n")
list(SORT listVar COMPARE NATURAL CASE SENSITIVE)
message("COMPARE NATURAL CASE SENSITIVE: listVar = ${listVar}\n")
list(SORT listVar COMPARE NATURAL CASE INSENSITIVE)
message("COMPARE NATURAL CASE INSENSITIVE: listVar = ${listVar}\n")
message("CASE SENSITIVE: listVar = ${listVar}\n")
list(SORT listVar ORDER ASCENDING)
message("ORDER ASCENDING: listVar = ${listVar}\n")
list(SORT listVar ORDER DESCENDING)
message("ORDER DESCENDING: listVar = ${listVar}\n")
特殊操作
在设置[为字符时需要注意这个可能会把两个字符组合成一个字符的.
message("-------------------------------")
set(noBrackets "a_a" "b_b")
set(withBrackets "a[a" "b]b")
list(LENGTH noBrackets lenNo)
list(LENGTH withBrackets lenWith)
list(GET noBrackets 0 firstNo)
list(GET withBrackets 0 firstWith)
message("No brackets: Length = ${lenNo} --> first element = ${firstNo}")
message("with brackets: Length = ${lenWith} --> first element = ${firstWith}")