openSUSE:使用 Meson 打包
此页面提供使用 Meson 构建系统在 openSUSE 中打包软件的指南和最佳实践。所有 全局打包指南 也适用于 Meson 项目。
Meson 构建系统
Meson 是一个现代构建系统,专注于速度和易用性。它通常与 Ninja 后端一起使用。
在 openSUSE 中使用 Meson 打包软件遵循与其他构建系统类似的约定,但有一些 Meson 特定的注意事项。
构建依赖
您必须添加
BuildRequires: meson
RPM 宏
Meson 构建系统已包含在 openSUSE 中,并在 /usr/lib/rpm/macros.d/macros.meson 中提供 rpm 宏。
%meson- 定义
CFLAGS、LDFLAGS等,并使用适当的参数(例如--libdir=%{_libdir})调用%__meson。您可以将-Doption=value传递给此宏,以设置构建系统的选项。 %meson_build- 使用正确的
-C和-j参数调用meson compiles。 %meson_installDESTDIR=%{buildroot} meson install -C ...的别名。%meson_testmeson test -C ...的别名。%__meson- 不鼓励直接使用此宏!
meson可执行文件的路径。
子项目
如果您的项目包含 Meson 子项目,这些子项目不可替换(无法链接到系统提供的库),您应该
- 要求上游允许链接到系统库
- 如果不可行,请手动管理 wraps。
将所需的项目添加到您的 SourceX 部分
... Source0: <PROJECT_SOURCE_TARBALL> Source1: <WRAP_1_SOURCE_TARBALL> ...
在您的 `.spec` 文件中,使用 `SourceX` 标签引用子项目存档,并在 `%prep` 阶段像这样提取它
%prep
...
# Extract symfpu
mkdir -p subprojects/<SUBPROJECT_NAME>
tar -C subprojects/<SUBPROJECT_NAME> --strip-components=1 -x -f %{SOURCE1}
然后,修改 %build 部分,使 meson 在构建之前应用补丁
%build meson subprojects packagefiles --apply ...
示例 RPM 规范文件
Name: example
Version: 2.31.1
Release: 0
Summary: Example summary
License: CHANGE-ME
URL: https://example.com
Source: %{name}-{version}.tar.gz
BuildRequires: meson
BuildRequires: gcc
%package devel
Summary: Development libraries and header files for %{name}
Requires: %{name} = %{version}
%description devel
%{summary}.
%prep
%autosetup
%build
%meson
%meson_build
%install
%meson_install
%check
%meson_test
%files
%{_libdir}/lib%{name}.so.*
%files devel
%{_libdir}/lib%{name}.so
%{_includedir}/%{name}.h