CMake 的 GLOB_RECURSE 似乎比我要求的递归更多

问题描述

在我的项目中,我有一个名为 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/ 文件。