【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仓库的更新状态。如果在使用脚本时发现有什么问题,请给我留言~~

ament_cmake_autoConfig.cmake和ament_cmake_auto-config.cmake都是用于自动配置ament_cmake包的CMake模块文件。这些文件包含了一些CMake变量和函数,用于设置ament_cmake包的构建和安装过程中所需的依赖项、编译选项和安装目录等信息。这些模块文件通常由ament_cmake包提供,可以在CMakeLists.txt文件中使用include()命令来加载它们,以便使用其中定义的功能和变量。具体来说,ament_cmake_autoConfig.cmake用于配置ament_cmake包的构建,而ament_cmake_auto-config.cmake用于配置ament_cmake包的安装。这两个文件都是通过在CMake的扩展点系统中使用的,以实现代码的模块化和灵活性。 <span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [【ROS2原理3】:构建系统“ament_cmake”和构建工具“ament_tools”](https://blog.csdn.net/gongdiwudu/article/details/126192244)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [ROS2学习(十六).ROS概念 - 构建系统](https://blog.csdn.net/amuro_ray027/article/details/120201983)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Xiao_Ley

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

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

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

打赏作者

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

抵扣说明:

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

余额充值