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 命令通常用于配置文件、复制文件、创建目录等操作。

  • 10
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值