CMake中的List关键词:详细指南

devtools/2024/10/25 9:06:55/

CMake中的List关键词:详细指南

  • 一、List的基本概念
  • 二、List的常用命令
    • 1. 获取List的长度
    • 2. 获取List中指定索引的元素
    • 3. 将元素追加到List中
    • 4. 在List中指定位置插入元素
    • 5. 在List的开头插入元素
    • 6. 从List中移除元素
    • 7. 移除List中的重复元素
    • 8. 对List进行排序
    • 9. 将List中的元素用连接符连接起来
    • 10. 在List中查找元素
  • 三、注意事项
  • 四、总结

CMake是一个跨平台的自动化构建系统,它使用名为CMakeLists.txt的配置文件来描述项目的构建规则。在CMake中,list是一个非常重要的数据结构,用于存储一系列的元素,如文件名、编译器选项等。本文将详细介绍CMake中list关键词的用法,帮助读者更好地理解和使用CMake进行项目管理。

一、List的基本概念

在CMake中,list是一个有序的元素集合,每个元素可以是字符串、数字或其他CMake变量。list通过特定的命令进行操作,如添加、删除、排序等。

二、List的常用命令

1. 获取List的长度

使用list(LENGTH <list> <output variable>)命令可以获取list的长度,并将结果存储在指定的输出变量中。

set(MY_LIST a b c d)
list(LENGTH MY_LIST LIST_LENGTH)
message(STATUS "The length of MY_LIST is: ${LIST_LENGTH}")

2. 获取List中指定索引的元素

使用list(GET <list> <element index>[...<element index>] <output variable>)命令可以获取list中指定索引的元素。索引从0开始,-1表示最后一个元素,-2表示倒数第二个元素,以此类推。

set(MY_LIST a b c d)
list(GET MY_LIST 1 3 MY_ELEMENTS)
message(STATUS "The elements at index 1 and 3 are: ${MY_ELEMENTS}")

3. 将元素追加到List中

使用list(APPEND <list> [<element>...])命令可以将一个或多个元素追加到list的末尾。

set(MY_LIST a b)
list(APPEND MY_LIST c d)
message(STATUS "MY_LIST after appending: ${MY_LIST}")

4. 在List中指定位置插入元素

使用list(INSERT <list> <element_index> <element>[...<element_index> <element>...])命令可以在list的指定位置插入一个或多个元素。

set(MY_LIST a b c)
list(INSERT MY_LIST 1 x y)
message(STATUS "MY_LIST after inserting: ${MY_LIST}")

5. 在List的开头插入元素

虽然CMake没有直接的命令在list的开头插入元素,但可以通过list(PREPEND <list> <element>[...<element>...])命令实现类似的效果,不过该命令实际上是在list的每个元素前添加指定的前缀。要实现真正的在开头插入,可以先创建一个新的list,再将原list的元素追加到新list中。

# 伪代码,CMake没有直接的list(PREPEND)用于插入元素
# 但可以通过以下方式实现类似效果
set(MY_LIST b c d)
set(NEW_ELEMENT a)
set(NEW_LIST ${NEW_ELEMENT})
list(APPEND NEW_LIST ${MY_LIST})
message(STATUS "MY_LIST after prepending: ${NEW_LIST}")

注意:上述代码中的list(PREPEND)并非CMake的实际命令,仅为说明目的。正确的做法如上面的伪代码所示。

6. 从List中移除元素

  • 使用list(REMOVE_ITEM <list> <value>[...<value>...])命令可以从list中移除指定的元素。
  • 使用list(REMOVE_AT <list> <index>[...<index>...])命令可以从list中移除指定索引的元素。
  • 使用list(POP_BACK <list> <out_var>)命令可以移除list的最后一个元素,并将该元素存储在指定的输出变量中。
  • 使用list(POP_FRONT <list> <out_var>)命令(CMake 3.10+)可以移除list的第一个元素,并将该元素存储在指定的输出变量中。

7. 移除List中的重复元素

使用list(REMOVE_DUPLICATES <list>)命令可以移除list中的重复元素。

8. 对List进行排序

使用list(SORT <list>[COMPARE <compare>][CASE <case>][ORDER <order>])命令可以对list进行排序。

  • COMPARE指定排序方法,如STRING(按字母顺序排序,默认)、FILE_BASENAME(如果是一系列路径名,则使用basename进行排序)、NATURAL(使用自然数顺序排列)。
  • CASE指明是否大小写敏感,如SENSITIVE(大小写敏感,默认)、INSENSITIVE(大小写不敏感)。
  • ORDER指明排序的顺序,如ASCENDING(升序排列,默认)、DESCENDING(降序排列)。

9. 将List中的元素用连接符连接起来

使用list(JOIN <list> <glue> <output variable>)命令可以将list中的元素用指定的连接符连接成一个字符串。

set(MY_LIST a b c)
list(JOIN MY_LIST " " MY_LIST_JOINED)
message(STATUS "MY_LIST joined with space: ${MY_LIST_JOINED}")

10. 在List中查找元素

使用list(FIND <list> <value> <output variable>)命令可以在list中查找指定的元素,并返回该元素的索引。如果找不到该元素,则返回-1。

set(MY_LIST a b c d)
list(FIND MY_LIST c INDEX)
message(STATUS "The index of 'c' in MY_LIST is: ${INDEX}")

三、注意事项

  • CMake中的list是通过空格分隔的字符串表示的,因此要注意元素中是否包含空格或特殊字符。
  • 在使用list命令时,要确保指定的list变量已经存在,否则CMake会报错。
  • CMake的list命令是大小写敏感的,因此在指定元素或索引时要保持一致。

四、总结

本文详细介绍了CMake中list关键词的用法,包括获取list长度、获取指定索引的元素、追加元素、插入元素、移除元素、移除重复元素、排序、连接元素以及查找元素等常用命令。通过学习本文,读者可以更好地理解和使用CMake进行项目管理,提高构建效率和代码质量。


http://www.ppmy.cn/devtools/128644.html

相关文章

【TIMM库】是一个专门为PyTorch用户设计的图像模型库 python库

TIMM库 1、引言&#xff1a;遇见TIMM2、初识TIMM&#xff1a;安装与基本结构3、实战案例一&#xff1a;图像分类4、实战案例二&#xff1a;迁移学习5、实战案例三&#xff1a;模型可视化6、结语&#xff1a;TIMM的无限可能 1、引言&#xff1a;遇见TIMM 大家好&#xff0c;我是…

基于 Datawhale 开源量化投资学习指南(8):量化调仓策略

1. 引言 在前面的章节中&#xff0c;我们学习了如何通过多因子模型和量化择时策略对股票的未来收益进行预测。我们探讨了如何根据这些预测信号进行投资决策。量化投资的一个核心挑战是如何在有限的资金约束下&#xff0c;合理分配资金到多个标的上&#xff0c;从而构建一个优化…

网站被浏览器提示“不安全”,如何快速解决

当网站被浏览器提示“不安全”时&#xff0c;这通常意味着网站存在某些安全隐患&#xff0c;需要立即采取措施进行解决。 一、具体原因如下&#xff1a; 1.如果网站使用的是HTTP协议&#xff0c;应立即升级HTTPS。HTTPS通过使用SSL证书加密来保护数据传输&#xff0c;提高了网…

centos7.x安装openCV 4.6.0版本

## 从源代码编译安装 1.更新系统 sudo yum update -y 2.安装依赖项 sudo yum groupinstall "Development Tools" sudo yum install cmake gcc-c git libjpeg-turbo-devel libpng-devel libtiff-devel libwebp-devel openexr-devel gstreamer1-plugins-base-devel…

百科知识|选购指南

百科知识||选购指南 百科知识选购指南茶叶分类茶叶的味道来源茶叶制作步骤名茶其他一些茶叶的知识 百科知识 选购指南 茶叶 分类 茶叶种类: 六大茶类完美分析介绍&#xff01;茶友推荐收藏 (aboxtik.com) 1.绿茶&#xff08;发酵率0%&#xff09; 2.白茶&#xff08;发酵率…

算法汇总整理篇——回溯与图论的千丝万缕及问题的抽象思考

回溯算法(重中之重) 回溯法解决的问题都可以抽象为树形结构&#xff0c;集合的大小就构成了树的广度&#xff0c;递归的深度就构成了树的深度。 (回溯的核心&#xff1a;分清楚什么数据作为广度&#xff0c;什么数据作为深度&#xff01;&#xff01;&#xff01;&#xff01…

ReactOS系统中平衡二叉树。给定地址超导其所属区块MmFindRegion()

系列文章目录 PMM_REGION NTAPI MmFindRegion( PVOID BaseAddress, PLIST_ENTRY RegionListHead, PVOID Address, PVOID* RegionBaseAddress ); 宏函数 //给定地址找到其中所属区块 #define CONTAINING_RECORD(address,type,field) ((type FAR *\(PCHAR)(address)-(PCHAR)(&…

【Nginx】win10 安装Nginx

1.下载 nginx: download 2.安装 解压即可 3.启动 可以自己修改端口&#xff0c;conf/nginx.conf 确保端口不被占用cmd启动&#xff08;不要双击nginx.exe启动&#xff0c;至于原因我粘贴一下&#xff09; start nginx.exe 可以看到是后台运行&#xff0c;还不错 访问&…