【问题标题】:Have CMake recursively scan folders?有 CMake 递归扫描文件夹吗?
【发布时间】:2012-04-02 11:45:06
【问题描述】:

如何设置 CMake 以递归扫描给定目录并确定源文件列表?

我的项目是一个共享库。我有一个类似这样的文件夹结构:

/
  src/              # Source files in an arbitrary tree
  include/          # Headers, tree mirrors that of the src/ folder
  examples/         # Executable code examples that link against the library
  CMakeLists.txt

我希望 CMake 递归扫描 srcinclude 并确定我的项目中的源文件和头文件列表,而不管目录结构如何。我也想避免:

  • 用无穷无尽的CMakeLists.txt 文件污染src/include/ 目录
  • 每次更改文件夹结构时都必须更改和调整脚本

不过,每个示例都有自己的构建脚本很好。

【问题讨论】:

  • @Medicineman25,这个问题是关于 globbing 单个目录的。我的是关于 globbing 整棵树,需要递归算法。
  • 确实如此,尽管答案是相同的。
  • @Medicineman25,但问题不是。虽然发布了递归解决方案,但许多可能重复的答案(包括接受的答案)与我的问题不兼容。
  • 我看到许多问题被标记为重复,其中问题不同但答案最终相同。这样,SO 鼓励人们找到正确的问题,而不仅仅是正确的答案。虽然你是对的:接受的答案是不同的,所以我会留下它:)

标签: build build-process cmake build-automation build-system


【解决方案1】:

CMake 为递归文件通配提供了以下命令:

file(GLOB_RECURSE variable [RELATIVE path] 
   [FOLLOW_SYMLINKS] [globbing expressions]...)

命令文档:http://www.cmake.org/cmake/help/v2.8.8/cmake.html#command:file

【讨论】:

  • 请注意,如果使用这种方法,每次添加或删除源文件时都必须重新生成 cmake。
  • @mrgrieves 有没有更有效的方法?如果是这样,请考虑为此问题添加另一个答案。
  • 这是一个非常糟糕的例子,因为文件(GLOB_RECURSIVE)不允许你选择性地选择子目录。
  • @mrgrieves 它在 3.11 左右得到了改进,其中 CONFIGURE_DEPENDS 标志允许使 globbing 结果成为配置步骤的依赖项。
猜你喜欢
  • 2010-11-02
  • 2012-10-10
  • 2023-03-16
  • 1970-01-01
  • 2011-11-07
  • 1970-01-01
  • 2019-08-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多