Build 是否让CMake递归扫描文件夹?

Build 是否让CMake递归扫描文件夹?,build,build-process,cmake,build-automation,build-system,Build,Build Process,Cmake,Build Automation,Build System,如何设置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 libra

如何设置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递归扫描
src
include
,并确定项目中的源文件和头文件列表,而不考虑目录结构。我还想避免:

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

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

CMake为递归文件全局化提供了以下命令:

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

命令文档:

请注意,如果使用此方法,则每次添加或删除源文件时都必须重新生成cmake。@mrGrives有没有更有效的方法?如果是这样的话,请考虑对这个问题添加另一个答案。这是一个很坏的例子,因为文件(GULL递归)不允许你有选择地选择子目录。@ MRFRESES它被改进了大约3.11,其中CasuluxId依赖标志允许使全球化结果依赖于配置步骤。这个问题是关于全球化一个目录。我的问题是全局化整棵树,需要一个递归算法。这是真的,尽管答案是相同的。@Medicineman25,但问题不是这样。虽然发布了递归解决方案,但许多可能重复的答案(包括已接受的答案)与我的问题不兼容。我见过许多标记为重复的问题,其中问题不同,但答案最终相同。这样做可以鼓励人们找到正确的问题,而不仅仅是正确的答案。虽然你是对的:被接受的答案是不同的,所以我留下:)