问题描述
在我的项目中,我有一个名为 foo
的子目录,我想要一个 .cpp
下所有 foo
文件及其子目录的列表。所以 - 对我来说是 GLOB_RECURSE。现在,查看 CMake documentation,我看到语法是:
file(GLOB_RECURSE <variable> [FOLLOW_SYMLINKS]
[LIST_DIRECTORIES true|false] [RELATIVE <path>] [CONfigURE_DEPENDS]
[<globbing-expressions>...])
就我而言:
file(GLOB_RECURSE my_list "foo/" "*.cpp")
不幸的是,我得到的是我的项目中所有 .cpp
文件的路径 - 而不仅仅是在 foo/
中。这是为什么?
解决方法
您误解了 <path>
占位符在语法中的作用。它仅在使用 RELATIVE
关键字时相关 - 而您没有使用 RELATIVE
。
因此,您实际提供的 GLOB_RECURSE
是两个 globbing 表达式。
奇怪的是,每个通配符表达式都被认为同时包含递归的根目录和通配符模式。在您的情况下,这将是:
file(GLOB_RECURSE my_list "foo/*.cpp")
CMake 将拆分该字符串,以便在 .cpp
的所有子目录中查找 foo/
文件。