跳到主要内容

宏标签

这个文档讲述了 openRuyi 的宏标签机制。

RPM 提供了一套丰富的宏,旨在使软件包的维护工作更简单,并确保跨软件包的一致性。例如,RPM 包含了一系列默认的路径定义(供构建系统宏使用),以及 RPM 软件包构建专用目录的定义。通常情况下,您应当使用这些宏,而不是硬编码目录路径。此外,RPM 还提供了默认的编译器标志宏,当您不依赖构建系统、而是手动编译时,应当使用这些宏。

通过在命令行中运行 rpm --eval,可以让 RPM 计算包含宏的任意字符串:

$ rpm --eval "some text printed on %{_arch}"
some text printed on riscv64

供构建系统设置和使用的路径宏

用于调用构建系统 (例如 %configure%cmake%meson) 的宏会使用 RPM 定义的值来为软件包设置安装路径。我们推荐不要在 spec 文件中硬编码这些路径,而是使用相同的宏以保持一致性。

这些宏的值可以通过查看相应平台的 /usr/lib/rpm/platform/*/macros 文件来检视。

以下列出了一些在 spec 文件中常见的宏:

宏标签含义注释
%{_lib}lib64
%{_bindir}%{_exec_prefix}/bin可执行文件的目 (通常为 /usr/bin)
%{_docdir}%{_datadir}/doc文档目录 (通常为 /usr/share/doc)
%{_libdir}%{_exec_prefix}/%{_lib}库文件目录 (通常为 /usr/%{_lib})
%{_libexecdir}%{_exec_prefix}/libexec可执行程序的目录 (通常为 /usr/libexec)
%{_datadir}%{_datarootdir}共享数据文件的目录 (通常为 /usr/share)
%{_mandir}%{_datarootdir}/man手册页文件的目录 (通常为 /usr/share/man)
%{_prefix}/usr顶级安装前缀
%{_sysconfdir}/etc系统配置文件的目录
%{_exec_prefix}%{_prefix}可执行文件路径前缀
%{_includedir}%{_prefix}/includeC/C++ 头文件目录 (通常为 /usr/include)
%{_infodir}%{_datarootdir}/infoGNU info 文件目录 (通常为 /usr/share/info)
%{_rundir}/run运行时数据目录 (通常用于 PID 文件、socket)
%{_localstatedir}/var本地状态数据目录
%{_sharedstatedir}/var/lib共享状态数据目录 (通常用于数据库、包管理状态等)

我们还有一些其他的路径宏标签,可以根据需要使用:

宏标签含义注释
%{_sbindir}%{_bindir} 相同系统管理可执行文件目录 executables
%{_unitdir}%{_exec_prefix}/lib/systemd/systemsystemd 单元文件的目录,通常为 /usr/lib/systemd/system

为 RPM (和 SRPM) 构建过程设置的宏

这些为与软件包构建过程相关的目录位置宏。通常来说,在 .spec 文件中唯一广泛使用的宏是 %{buildroot}

宏标签含义注释
%{buildroot}%{_buildrootdir}/%{name}-%{version}-%{release}.%{_arch}安装测试时的虚拟根目录,同 $RPM_BUILD_ROOT
%{_topdir}%{getenv:HOME}/rpmbuild构建的顶级目录,包含 BUILDRPMSSOURCESSPECSSRPMS 等子目录
%{_builddir}%{_topdir}/BUILD源码展开和编译时的工作目录。通常为 ~/rpmbuild/BUILD
%{_rpmdir}%{_topdir}/RPMS存放生成的二进制 RPM 包
%{_sourcedir}%{_topdir}/SOURCES存放源代码、补丁和资源文件
%{_specdir}%{_topdir}/SPECS存放 .spec 文件
%{_srcrpmdir}%{_topdir}/SRPMS存放生成的源代码 RPM 包
%{_buildrootdir}%{_topdir}/BUILDROOT存放各个构建包的 buildroot 根目录

提供编译器和链接器标志的宏

我们提供%{optflags} 宏,包含 CFLAGSCXXFLAGSFFLAGS 等的 FLAG。由构建系统设置的 LDFLAGS 环境变量的值由 %{build_ldflags} 宏决定。

其它路径宏

Bash

宏标签含义注释
%{bash_completions_dir}%{_datadir}/bash-completion/completions存放 bash 的自动补全脚本