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

如何用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')
    

可行性说明

  1. 直接在files()里写*.c不可行,因为files()仅接受具体文件名列表,不支持通配符语法。
  2. 使用glob()函数实现通配匹配完全可行,这是Meson官方推荐的批量获取源码文件的方案。
  3. 结合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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 16:15:34