能否拆分meson.build文件?除subdir外还有哪些实现方式?
拆分Meson.build文件的替代方案(无需subdir)
Meson 提供了include()函数,完全可以满足你无需分散放置meson.build文件、实现类似"import"的需求——它能直接读取并执行指定路径下的Meson脚本文件,将其中的变量、函数、配置逻辑并入当前构建上下文。
核心用法
- 基本调用:在主
meson.build中直接使用include('路径/目标脚本.build'),路径以当前调用include()的文件为基准(支持相对路径)。比如把共享脚本集中放在项目根目录的meson_shared文件夹里,就可以写:include('meson_shared/common_config.build') - 上下文共享:被引入文件里的所有定义都会直接生效,无需额外导出。比如在
common_config.build里定义的编译参数、依赖项,主文件可以直接使用。
示例演示
主 meson.build
project('my_app', 'c', version: '1.0') # 引入共享配置脚本 include('meson_shared/build_utils.build') # 使用共享脚本中的变量和函数 executable('my_app', 'src/main.c', c_args: common_cflags, dependencies: get_common_deps())
meson_shared/build_utils.build
# 通用编译参数 common_cflags = ['-Wall', '-Wextra', '-O2'] # 封装获取通用依赖的函数 get_common_deps = function() return [dependency('glib-2.0'), dependency('json-c')] endfunction
注意事项
- 整个构建流程中只能有一个
project()调用,所以被引入的脚本里不要包含顶级的project()定义。 - 如果是嵌套使用
include()(比如A脚本include B脚本),路径要以当前脚本的位置为基准,避免路径错误。 - 跨项目共享时,可以将这些通用脚本单独放在一个仓库,通过Meson的wrap系统引入到各个项目,或者直接复制到项目的指定目录后用
include()加载。
内容的提问来源于stack exchange,提问作者SRobertJames
相关产品推荐
相关产品推荐

