Cmake GLOB_RECURSE获取文件夹路径
时间: 2023-10-13 12:05:47 浏览: 301
CMake的GLOB_RECURSE命令用于获取指定文件夹及其子文件夹中的所有文件路径。在给定的引用中,使用GLOB_RECURSE命令来获取所有.cpp文件的路径,并将其保存在ENDF6_SRC变量中。如果你想要获取文件夹路径而不包括Test目录中的.cpp文件,你可以使用以下方法:
在顶层目录的CMakeLists.txt文件中添加以下行:
```
file(GLOB_RECURSE ENDF6_SRC ${PROJECT_SOURCE_DIR}/*.cpp)
list(FILTER ENDF6_SRC EXCLUDE REGEX ".*/Test/.*\\.cpp$")
```
这样,ENDF6_SRC变量将包含TopDir目录及其子目录中的所有.cpp文件路径,但不包括Test目录中的.cpp文件。
相关问题
cmake glob_recurse
在CMake中,`file(GLOB_RECURSE)`是一个用于匹配指定路径下所有符合通配符条件的文件的命令。具体来说,`GLOB_RECURSE`是递归查找目录下的所有文件,`file()`命令可以用来获取文件列表。
例如,如果你想捕获所有以.cpp结尾的文件作为源文件,并将它们存储在`ENDF6_SRC`变量中,可以使用以下命令:
```cmake
file(GLOB_RECURSE ENDF6_SRC ${PROJECT_SOURCE_DIR}/*.cpp)
```
这将在`PROJECT_SOURCE_DIR`目录下递归查找所有以.cpp结尾的文件,并将它们存储在`ENDF6_SRC`变量中。
如果你不想从`Test`目录添加.cpp文件,而且也不想在`File/`或`Section/`中有一个`CMakeLists.txt`文件,你可以按照以下方式进行操作:
```cmake
file(GLOB ENDF6_SRC_TOP ${PROJECT_SOURCE_DIR}/*.cpp)
file(GLOB_RECURSE ENDF6_SRC_NESTED ${PROJECT_SOURCE_DIR}/File/*.cpp ${PROJECT_SOURCE_DIR}/Section/*.cpp)
set(ENDF6_SRC ${ENDF6_SRC_TOP} ${ENDF6_SRC_NESTED})
```
这将首先获取顶级目录中所有以.cpp结尾的文件,然后递归查找`File/`和`Section/`目录下的.cpp文件,并将所有这些文件存储在`ENDF6_SRC`变量中。
顺便说一下,如果在顶级目录中执行`file(GLOB_RECURSE ...)`命令,可能会从构建文件夹中选择不需要的.cpp文件(也就是构建根位于`TopDir`内部的文件)。
file(GLOB_RECURSE
file(GLOB_RECURSE) 是 CMake 中的一个命令,用于查找匹配特定模式的文件并将其添加到一个变量中。其中,GLOB_RECURSE 表示递归地查找文件,即在当前目录及其子目录中查找。使用该命令的一般语法如下:
```
file(GLOB_RECURSE <variable> <globbing-expression>)
```
其中,`<variable>` 表示要存储匹配文件的变量名,`<globbing-expression>` 是一个通配符模式,用于匹配文件名。例如,要查找所有的 C++ 源文件,可以使用以下语句:
```
file(GLOB_RECURSE CPP_SOURCES "*.cpp")
```
该语句会查找当前目录及其子目录中所有扩展名为 ".cpp" 的文件,并将它们存储在变量 CPP_SOURCES 中。需要注意的是,使用 file(GLOB_RECURSE) 命令可能会导致一些问题,例如无法跟踪文件的更改、生成时间等。因此,在实际使用时应该谨慎考虑。
阅读全文