二十三、Meson构建文件函数——wrap()
-
Wrap依赖系统可以使得Meson自动加载和编译所需要的依赖库。
-
必须要在
subprojects
目录中,编写名为<project_name>.wrap
的文件。该文件目前有四种类型:wrap-file
、wrap-git
、wrap-hg
、wrap-svn
。我们主要使用的是前两种,下面也主要介绍前两种。
1 wrap-file
我们以 gstreamer
中的 glib.wrap
为例。
[wrap-file]
directory = glib-2.74.1
source_url = https://download.gnome.org/sources/glib/2.74/glib-2.74.1.tar.xz
source_fallback_url = https://ftp.acc.umu.se/pub/gnome/sources/glib/2.74/glib-2.74.1.tar.xz
source_filename = glib-2.74.1.tar.xz
source_hash = 0ab981618d1db47845e56417b0d7c123f81a3427b2b9c93f5a46ff5bbb964964
wrapdb_version = 2.74.1-1
[provide]
# 可以在主项目中直接搜索 以下执行程序使用,比如 glib-compile-schemas
dependency_names = gthread-2.0, gobject-2.0, gmodule-no-export-2.0, gmodule-export-2.0, gmodule-2.0, glib-2.0, gio-2.0, gio-windows-2.0, gio-unix-2.0
program_names = glib-genmarshal, glib-mkenums, glib-compile-schemas, glib-compile-resources, gio-querymodules, gdbus-codegen
-
directory: 表示下载后的文件,解压到该目录中
-
source_url: 文件下载链接
-
source_fallback_url: 备用下载链接
-
source_filename: 下载后的文件名称
-
source_hash: 文件的哈希验证值
1.1 通过provide无需指定fallback
-
第一种方式是:子项目中使用了
meson.override_dependency
,我们可以使用dependency_names
后,主项目中可以直接使用dependency
查找该依赖,如果不能找到,自动就会通过wrap下载,不需要额外指定fallback。 -
第二种就是,子项目没有使用
meson.override_dependency
,我们可以通过gobject-2.0=libgobject_dep
方式。主项目中可以直接使用dependency
查找该依赖,如果不能找到,自动就会通过wrap下载,不需要额外指定fallback。
1.2 没有provide手动指定fallback
project('my_project', 'cpp', version: '1.0')
# 手动指定子项目 my_zlib 中的 zlib_dep 依赖
my_dep = dependency('my_zlib', required: true, fallback: ['my_zlib', 'zlib_dep'])
executable('demo', 'main.cpp',
dependencies: my_dep)
2 wrap-git
这部分可以在 /assets/BuildSystem/Meson/16_subproject_wrap/参考
[wrap-git]
directory=simple
url=https://github.com/LieryangStack/libsimple.git
[provide]
simple=libsimple_dep