file(GLOB ...)
是 CMake 的一个命令,用于在构建过程中扫描指定目录中的文件,并将符合模式的文件路径存储到变量中。该命令可以用来收集文件,以便在构建过程中使用。
语法
file(GLOB <variable> <glob_options> <path> <glob_pattern>)
<variable>
:这是用于存储符合条件文件路径的变量名。<glob_options>
:可选项,可以是一些额外的选项,如RELATIVE
(返回相对路径)、FOLLOW_SYMLINKS
(跟随符号链接)。<path>
:要扫描的目录。<glob_pattern>
:用于匹配文件的模式(例如*.cpp
,*.h
)。
解释
下面是您提供的四行 file(GLOB ...)
命令的详细解释:
file(GLOB PRO_SOURCE_DIR RELATIVE ${CMAKE_SOURCE_DIR} FOLLOW_SYMLINKS src/*.cpp)
- 该命令扫描项目目录下的
src
目录,并查找所有以.cpp
结尾的文件。 PRO_SOURCE_DIR
:将符合条件的文件路径存储到该变量中。RELATIVE ${CMAKE_SOURCE_DIR}
:返回的文件路径相对于${CMAKE_SOURCE_DIR}
(项目的根目录)。FOLLOW_SYMLINKS
:如果有符号链接,CMake 会跟随这些链接,找到实际的文件。
file(GLOB PRO_UI_DIR RELATIVE ${CMAKE_SOURCE_DIR} FOLLOW_SYMLINKS ui/*.ui)
- 该命令扫描
ui
目录,查找所有以.ui
结尾的文件。 - 存储路径在
PRO_UI_DIR
变量中,并且路径是相对${CMAKE_SOURCE_DIR}
的。
file(GLOB PRO_INCLUDE_DIR RELATIVE ${CMAKE_SOURCE_DIR} FOLLOW_SYMLINKS include/*.h *.hpp)
- 该命令扫描
include
目录,查找所有以.h
和.hpp
结尾的头文件。 - 将符合条件的文件路径存储在
PRO_INCLUDE_DIR
变量中。
file(GLOB PRO_RESOURCE_DIR RELATIVE ${CMAKE_SOURCE_DIR} FOLLOW_SYMLINKS resource/*.qrc)
- 该命令扫描
resource
目录,查找所有以.qrc
结尾的资源文件(Qt 资源文件)。 - 存储符合条件的文件路径在
PRO_RESOURCE_DIR
变量中。
作用
通过 file(GLOB ...)
,我们能够动态地扫描并收集项目中指定目录下的文件,而不必手动列出它们。这样做可以简化项目管理,尤其是在源文件或资源文件较多的情况下。例如,当新的 .cpp
文件或 .h
文件被添加到 src
或 include
目录时,CMake 会自动识别这些文件,无需手动更新 CMake 配置。
注意事项
file(GLOB ...)
是在 CMake 配置阶段执行的,因此它会在构建前一次性扫描文件,后续文件的变化不会自动更新,除非手动重新运行 CMake。GLOB
不会自动跟踪文件的添加或删除,若新增了文件,需要重新运行 CMake 以更新构建系统。