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