cmake命令之list(转)

打印 上一主题 下一主题

主题 553|帖子 553|积分 1659

一、介绍
cmake的list命令即对列表的一系列操作,cmake中的列表变量是用分号;分隔的一组字符串
创建列表可以使用set命令(参考set命令),例如:set (var a b c d)创建了一个列表 "a;b;c;d",而set (var "a b c d")则是只创建了一个变量"a c c d"。list命令的具体格式根据子命令不同会有所区别。
下面是list提供的命令
  1. 1     list(LENGTH <list><output variable>)
  2. 2     list(GET <list> <elementindex> [<element index> ...]<output variable>)
  3. 3     list(APPEND <list><element> [<element> ...])
  4. 4     list(FIND <list> <value><output variable>)
  5. 5     list(INSERT <list><element_index> <element> [<element> ...])
  6. 6     list(REMOVE_ITEM <list> <value>[<value> ...])
  7. 7     list(REMOVE_AT <list><index> [<index> ...])
  8. 8     list(REMOVE_DUPLICATES <list>)
  9. 9     list(REVERSE <list>)
  10. 10     list(SORT <list>)
复制代码
 我们可以看到,list命令的格式如下
  1. list (subcommand <list> [args...])
复制代码
subcommand为具体的列表操作子命令,例如读取、查找、修改、排序等。为待操作的列表变量,[args...]为对列表变量操作需要使用的参数表,不同的子命令对应的参数也不一致。
  1. 1 ENGTH            返回list的长度
  2. 2  
  3. 3 GET              返回list中index的element到value中
  4. 4  
  5. 5 APPEND            添加新element到list中
  6. 6  
  7. 7 FIND             返回list中element的index,没有找到返回-1
  8. 8  
  9. 9 INSERT           将新element插入到list中index的位置
  10. 10  
  11. 11 REMOVE_ITEM      从list中删除某个element
  12. 12  
  13. 13 REMOVE_AT       从list中删除指定index的element
  14. 14  
  15. 15 REMOVE_DUPLICATES       从list中删除重复的element
  16. 16  
  17. 17 REVERSE         将list的内容反转
  18. 18  
  19. 19 SORT           将list按字母顺序排序
复制代码
 
二、实例

列表的读取
2.1 LENGTH:子命令LENGTH用于读取列表长度
  1. list (LENGTH <list> <output variable>)
  2. # <output variable>为新创建的变量,用于存储列表的长度。
复制代码
执行结果

 
 2.2 GET:子命令GET用于读取列表中指定索引的的元素,可以指定多个索引。
  1. list (GET <list> <element index> [<element index> ...] <output variable>)
  2. #  <element index>为列表元素的索引,从0开始编号,索引0的元素为列表中的第一个元素;索引也可以是负数,-1表示列表的最后一个元素,-2表示列表倒数第二个元素,以此类推。注意:当索引(不管是正还是负)超过列表的长度,运行会报错(list index: XX out of range)。
  3. # <output variable>为新创建的变量,存储指定索引元素的返回结果,也是一个列表。
复制代码
执行结果

 
 2.3、列表的查找
FIND:子命令FIND用于查找列表是否存在指定的元素。
  1. list (FIND <list> <value> <output variable>)
  2.   如果列表<list>中存在<value>,那么返回<value>在列表中的索引,如果未找到则返回-1。
复制代码
  1. 1 macro( __LIST_FILTER listvar regex )
  2. 2   if( ${listvar} )
  3. 3     foreach( __val ${${listvar}} )
  4. 4       if( __val MATCHES "${regex}" )
  5. 5         list( REMOVE_ITEM ${listvar} "${__val}" )
  6. 6       endif()
  7. 7     endforeach()
  8. 8   endif()
  9. 9 endmacro()
  10. 10  
  11. 11 # 使用
  12. 12   __LIST_FILTER( __availableToolchainsLst "^[.]" ) # 删除文件
  13. 13   __LIST_FILTER( __availableToolchainsLst "llvm" )
  14. 14   __LIST_FILTER( __availableToolchainsLst "renderscript" )
复制代码
  1. 1 # CMakeLists.txt
  2. 2 cmake_minimum_required (VERSION 3.12.2)
  3. 3  
  4. 4 project (list_cmd_test)
  5. 5  
  6. 6 set (list_test a b c d) # 创建列表变量"a;b;c;d"
  7. 7  
  8. 8 list (FIND list_test d list_index)
  9. 9  
  10. 10 message (">>> FIND 'd': ${list_index}")
  11. 11  
  12. 12 list (FIND list_test e list_index)
  13. 13  
  14. 14 message (">>> FIND 'e': ${list_index}")
复制代码
执行结果

 
转载自:
https://blog.csdn.net/sinat_31608641/article/details/123101692?spm=1001.2101.3001.6650.5&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-5-123101692-blog-123832706.pc_relevant_aa&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-5-123101692-blog-123832706.pc_relevant_aa&utm_relevant_index=10
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

用户云卷云舒

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表