【CMake 脚本】fetch_paths.cmake - 递归检索文件路径,不再为手动添加源文件而烦恼

fetch_paths.cmake是一个CMake插件,用于根据给定参数检索、过滤和排序目录路径,支持递归和非递归搜索,以及灵活的输出和排除规则。文章详细介绍了其功能、参数和示例应用。
摘要由CSDN通过智能技术生成

链接:
https://github.com/XiaoLey/fetch_paths.cmake
https://gitee.com/XiaoLey/fetch_paths.cmake

fetch_paths.cmake

fetch_paths 是一个自定义的 CMake 函数,用于检索或目录路径,并支持各种过滤和排序选项。它可以配置为获取文件路径目录路径,并允许用户指定相对路径、工作目录、输出过滤列表、排除过滤列表等参数。此函数支持递归搜索非递归搜索,也支持将结果追加到已有列表或覆盖现有列表。

函数原型

fetch_paths(<output_var>
            [RELATIVE_PATH <relative_path>]
            [WORKING_DIRECTORY <directory>]
            [OUTPUT_FILTER_LIST <regex> ...]
            [EXCLUDE_FILTER_LIST <regex> ...]
            [EXCLUDE_LIST_VAR <var>]
            [EXCLUDE_LIST_FILTER_LIST <regex> ...]
            [APPEND]
            [DISABLE_RECURSION]
            [DIRECTORY])

参数

参数名称描述
output_var输出列表变量。
RELATIVE_PATH <relative_path>输出的相对路径。如果提供相对路径,相对于 CMAKE_CURRENT_SOURCE_DIR
WORKING_DIRECTORY <directory>输出时的工作目录。如果提供相对路径,相对于 CMAKE_CURRENT_SOURCE_DIR
OUTPUT_FILTER_LIST <regex> ...输出过滤列表,使用正则表达式匹配路径。
EXCLUDE_FILTER_LIST <regex> ...排除过滤列表,使用正则表达式匹配路径。它将在“输出过滤列表(OUTPUT_FILTER_LIST)”的基础上排除。
EXCLUDE_LIST_VAR <var>排除列表变量。不符合过滤条件的路径将被保存到此变量。如果没有定义“排除过滤列表(EXCLUDE_FILTER_LIST)”,那么变量始终为空。
EXCLUDE_LIST_FILTER_LIST <regex> ...排除列表过滤列表,使用正则表达式匹配路径。在“排除列表(EXCLUDE_LIST_VAR)” 列表中,符合该列表过滤条件的路径将被保留,其余的被移除。此过滤只会影响“排除列表(EXCLUDE_LIST_VAR)”,不会影响“输出列表(output_var)”。
APPEND追加模式。如果设置,输出列表将追加到现有输出列表,否则覆盖。
DISABLE_RECURSION禁用递归。如果设置,只检索指定工作目录中的文件或目录(看具体情况),不递归子目录。
DIRECTORY获取目录而非文件。

默认值

  • RELATIVE_PATHWORKING_DIRECTORY 若未指定或为空,默认为 CMAKE_CURRENT_SOURCE_DIR
  • OUTPUT_FILTER_LIST 默认为 [".+\.(c|cpp|cc|cxx)$"],如果设置了 DIRECTORY,则为 [".*"]
  • EXCLUDE_FILTER_LIST 默认未定义。
  • EXCLUDE_LIST_FILTER_LIST 默认为 [".*"]
  • DISABLE_RECURSION, APPEND 默认不设置。

示例

  • 获取 CMAKE_CURRENT_SOURCE_DIR 目录中所有 C/C++ 源文件的相对路径。

    fetch_paths(output_files)
    
  • 获取 CMAKE_CURRENT_SOURCE_DIR 目录中所有 C/C++ 源文件的相对路径,但不查找子目录。

    fetch_paths(output_files DISABLE_RECURSION)
    
  • 获取 CMAKE_CURRENT_SOURCE_DIR 目录中所有 C/C++ 源文件的相对于 CMAKE_SOURCE_DIR 的路径。

    fetch_paths(output_files RELATIVE_PATH ${CMAKE_SOURCE_DIR})
    
  • 获取 CMAKE_SOURCE_DIR 目录中所有 C/C++ 源文件的相对于 CMAKE_CURRENT_SOURCE_DIR 的路径。

    fetch_paths(output_files WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
    
  • 获取 CMAKE_CURRENT_SOURCE_DIR 目录中所有参与 Qt 编译的文件的相对路径。

    fetch_paths(output_files OUTPUT_FILTER_LIST ".+\\.ui$" ".+\\.qrc$" ".+\\.(c|cpp|cc|cxx)$" ".+\\.h$")
    
  • 获取 CMAKE_CURRENT_SOURCE_DIR 目录中所有目录路径。

    fetch_paths(output_dirs DIRECTORY)
    
  • 获取 CMAKE_CURRENT_SOURCE_DIR 目录中所有目录的相对于系统根目录的路径。

    # Linux
    fetch_paths(output_dirs DIRECTORY RELATIVE_PATH "/")
    # Windows
    fetch_paths(output_dirs DIRECTORY RELATIVE_PATH "C:/")
    
  • 获取 CMAKE_SOURCE_DIR 目录中所有文件和目录的相对路径。

    fetch_paths(output OUTPUT_FILTER_LIST ".*")
    fetch_paths(output DIRECTORY APPEND)
    

后话

目前脚本正积极更新中,请感兴趣的小伙伴随时查看git仓库的更新状态。如果在使用脚本时发现有什么问题,请给我留言~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Xiao_Ley

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值