You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否从Meson的include_directories()中提取头文件转为file类型?

在Meson中从include_directories()提取头文件转为file类型的方法

Meson没有直接从inc类型对象中提取头文件的内置方法,但可以通过遍历include目录+glob匹配的方式,自动收集头文件并转为file类型,避免手动维护files()列表的麻烦,具体实现如下:

1. 基础实现:收集指定目录下的头文件

先定义你的include目录,然后遍历每个目录,用glob()函数匹配头文件:

# 定义你的include目录集合
my_includes = include_directories('include', 'src/internal/include')

# 初始化空数组存储头文件
header_files = []

# 遍历每个include目录,收集头文件
foreach inc_dir : my_includes
  # 匹配.h和.hpp后缀的文件
  header_files += glob(inc_dir / '*.h', inc_dir / '*.hpp')
endforeach

此时header_files就是标准的file类型数组,可以直接作为格式化工具的输入,比如配合run_target实现自动格式化:

# 定义格式化目标
run_target('format_headers',
  command: ['clang-format', '-i', '@INPUT@'],
  input: header_files
)

2. 递归收集子目录中的头文件

如果需要包含include目录下所有子目录的头文件,给glob()添加recursive: true参数:

foreach inc_dir : my_includes
  header_files += glob(inc_dir / '**/*.h', inc_dir / '**/*.hpp', recursive: true)
endforeach

3. 排除不需要的文件

如果有部分头文件不需要格式化,可以用exclude参数过滤:

foreach inc_dir : my_includes
  header_files += glob(inc_dir / '*.h', exclude: ['third_party_header.h', 'legacy_api.h'])
endforeach

这种方式的核心是利用include_directories()返回的inc对象可被遍历为目录路径的特性,结合glob()自动匹配文件,既和项目的include配置保持一致,又省去了手动维护文件列表的工作量。

内容的提问来源于stack exchange,提问作者Andries

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 01:14:53