`file(GLOB ...)`动态地扫描并收集项目中指定目录下的文件

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 文件被添加到 srcinclude 目录时,CMake 会自动识别这些文件,无需手动更新 CMake 配置。

注意事项

  • file(GLOB ...) 是在 CMake 配置阶段执行的,因此它会在构建前一次性扫描文件,后续文件的变化不会自动更新,除非手动重新运行 CMake。
  • GLOB 不会自动跟踪文件的添加或删除,若新增了文件,需要重新运行 CMake 以更新构建系统
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值