如何用Meson构建指定目录?支持正则或专用函数实现吗?
Meson构建脚本:指定目录源码的实现方案
现有Meson构建脚本如下:
project('tutorial', ['c'], version : '1.0v') src = files(['file1.c', 'file2.c', 'file3.c']) executable('tutorial', sources : [src], c_args : [CFLAGS], link_args : [LDFLAGS, LDFLAGS_OUTPUT])请问如何通过正则表达式(如
src = files(['*.c']))或Meson专用函数(如meson.src_dir('src/'))实现指定目录的构建?是否可行?
一、批量匹配源码文件(类似正则通配的实现)
Meson不支持直接在files()里用*.c这类通配符,但可以用官方提供的glob()函数实现批量匹配,这是最常用的方式:
- 匹配当前目录下所有
.c文件:src = glob('*.c') - 匹配指定子目录(比如
src/)下所有.c文件:src = glob('src/*.c') - 递归匹配指定目录下所有
.c文件(包括嵌套子目录):src = glob('src/**/*.c', recursive : true)
二、结合Meson目录函数精准指定路径
如果需要明确基于项目目录结构定位源码,可以搭配Meson的目录函数和glob()使用:
meson.current_source_dir():返回当前meson.build文件所在的源码目录路径meson.source_root():返回整个项目的根源码目录路径
示例:
- 匹配当前
meson.build所在目录下的.c文件:src = glob(meson.current_source_dir() + '/*.c') - 匹配项目根目录下
src/子目录的所有.c文件:src = glob(meson.source_root() + '/src/*.c')
可行性说明
- 直接在
files()里写*.c不可行,因为files()仅接受具体文件名列表,不支持通配符语法。 - 使用
glob()函数实现通配匹配完全可行,这是Meson官方推荐的批量获取源码文件的方案。 - 结合Meson目录函数可以更精准地控制源码范围,搭配
glob()使用灵活度很高。
修改后的完整脚本示例
project('tutorial', ['c'], version : '1.0v') # 替换为匹配当前目录所有.c文件 src = glob('*.c') # 也可替换为指定子目录的匹配规则 # src = glob('src/*.c') executable('tutorial', sources : [src], c_args : [CFLAGS], link_args : [LDFLAGS, LDFLAGS_OUTPUT])
内容的提问来源于stack exchange,提问作者Nell69Rock
相关产品推荐
相关产品推荐

