能否从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
相关产品推荐
相关产品推荐

