cmake列表

 目录

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}")

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

波雅_汉库克

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值