当前位置: 首页 > article >正文

CMakeLists获取文件夹——file指令

CMakeLists获取文件夹——file

在 CMake 中查找当前目录及其子目录中的所有文件夹的方法有几种。以下是三种常见的方法,并附有相应的示例:

获取文件夹

方法一:使用 file(GLOB ...) 命令

cmake_minimum_required(VERSION 3.22.1)
project(MyProject)

# 使用 GLOB 获取所有文件夹
file(GLOB_RECURSE ALL_SUBDIRECTORIES LIST_DIRECTORIES true "*")

# 输出所有文件夹
message("All subdirectories:")
foreach(subdir ${ALL_SUBDIRECTORIES})
    if(IS_DIRECTORY ${subdir})
        message("  ${subdir}")
    endif()
endforeach()

方法二:使用 file(GLOB ...) 结合 LIST_DIRECTORIES 选项

cmake_minimum_required(VERSION 3.22.1)
project(MyProject)

# 使用 GLOB 获取所有文件夹
file(GLOB ALL_SUBDIRECTORIES LIST_DIRECTORIES true "*")

# 输出所有文件夹
message("All subdirectories:")
foreach(subdir ${ALL_SUBDIRECTORIES})
    message("  ${subdir}")
endforeach()

方法三:使用 file(GLOB ...) 结合 DIRECTORY 选项

cmake_minimum_required(VERSION 3.22.1)
project(MyProject)

# 使用 GLOB 获取所有文件夹
file(GLOB ALL_SUBDIRECTORIES DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} "*")

# 输出所有文件夹
message("All subdirectories:")
foreach(subdir ${ALL_SUBDIRECTORIES})
    message("  ${subdir}")
endforeach()

示例说明:

假设当前目录结构如下:

.
├── Subdir1
│   ├── Subsubdir1
│   └── Subsubdir2
├── Subdir2
├── Subdir3
└── CMakeLists.txt

在这个例子中,以上三种方法都会输出所有子目录的路径:

All subdirectories:
  /path/to/your/project/Subdir1
  /path/to/your/project/Subdir1/Subsubdir1
  /path/to/your/project/Subdir1/Subsubdir2
  /path/to/your/project/Subdir2
  /path/to/your/project/Subdir3

这样你就可以根据实际需求使用其中的一种方法来获取当前目录及其子目录中的所有文件夹。

让我们详细解释这三行代码以及每个参数的含义:

file(GLOB_RECURSE ALL_SUBDIRECTORIES LIST_DIRECTORIES true "*")

  • GLOB_RECURSE
    • 这是 file 命令的一种模式,用于递归地获取匹配指定通配符模式的文件。
  • ALL_SUBDIRECTORIES
    • 这是一个自定义的变量名,用于存储匹配的文件列表。
  • LIST_DIRECTORIES
    • 这是 file 命令的选项,设置为 true 表示匹配的文件列表中包含目录。
  • true
    • 这是通配符模式,用于匹配所有文件和文件夹。

file(GLOB ALL_SUBDIRECTORIES LIST_DIRECTORIES true "*")

  • GLOB
    • 这是 file 命令的一种模式,用于获取匹配指定通配符模式的文件。
  • ALL_SUBDIRECTORIES
    • 这是一个自定义的变量名,用于存储匹配的文件列表。
  • LIST_DIRECTORIES
    • 这是 file 命令的选项,设置为 true 表示匹配的文件列表中包含目录。
  • true
    • 这是通配符模式,用于匹配所有文件和文件夹。

file(GLOB ALL_SUBDIRECTORIES DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} "*")

  • GLOB
    • 这是 file 命令的一种模式,用于获取匹配指定通配符模式的文件。
  • ALL_SUBDIRECTORIES
    • 这是一个自定义的变量名,用于存储匹配的文件列表。
  • DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
    • 这是 file 命令的选项,指定要搜索的目录。${CMAKE_CURRENT_SOURCE_DIR} 是当前源码目录的路径。
  • "\*"
    • 这是通配符模式,用于匹配所有文件和文件夹。

CMake中file命令的使用方法:

file 命令主要用于文件和目录的操作,包括文件操作、路径操作、目录操作等。以下是 file 命令的一些常见用法:

  • file(GLOB variable [RELATIVE path] [globbing expressions...])
    • 获取匹配指定通配符模式的文件列表,并将结果存储到变量中。
  • file(GLOB_RECURSE variable [RELATIVE path] [globbing expressions...])
    • 递归获取匹配指定通配符模式的文件列表,并将结果存储到变量中。
  • file(READ filename variable)
    • 读取指定文件的内容,并将结果存储到变量中。
  • file(WRITE filename [content])
    • 将指定内容写入文件。
  • file(MAKE_DIRECTORY [directory...])
    • 创建目录。
  • file(REMOVE [file1 file2 ...])
    • 删除文件。
  • file(REMOVE_RECURSE [directory1 directory2 ...])
    • 递归删除目录及其内容。

这些是 file 命令的一些基本用法,具体的使用取决于你的需求。在 CMake 中,file 命令通常用于配置文件、复制文件、创建目录等操作。


http://www.kler.cn/a/161170.html

相关文章:

  • 扫雷游戏代码分享(c基础)
  • 物联网(RFID)全景:被装信息化监控应用与挑战
  • 期权懂|期权新手入门教学:期权合约有哪些要素?
  • 【ubuntu】单进程申请4GB内存
  • CSP/信奥赛C++语法基础刷题训练(1):洛谷P5715 :三位数排序
  • 【C++】详细介绍模版进阶,细节满满
  • 形态学操作—细化
  • Python 日志(略讲)
  • Java程序员,你掌握了多线程吗?(文末送书)
  • 圣诞将至—C语言圣诞树代码来啦
  • VIR-SLAM代码分析3——VIR_VINS详解之estimator.cpp/.h
  • Wnmp本地搭建结合内网穿透实现远程访问本地Wnmp服务
  • 使用VS Code远程开发MENJA小游戏并通过内网穿透分享本地游戏到公网
  • NR重写console.log 增加时间信息
  • 在Linux上安装KVM虚拟机
  • 冒泡排序详解
  • Android 记录一些Framework开发的命令
  • Think in Java之多态
  • 2024年网络安全比赛--系统渗透测试(超详细)
  • vue.js el-table 动态单元格列合并
  • 数据库压力测试方法小结
  • TiDB专题---2、TiDB整体架构和应用场景
  • YashanDB练习SQL
  • CFLAGS、CXXFLAGS、FFLAGS、FCFLAGS、LDFLAGS、LD_LIBRARY_PATH区别
  • 高效的单行python脚本
  • C++ 指针进阶