如何将变量传递到spec文件?

时间:2014-03-24 16:44:05

标签: fedora redhat rpm specifications

我正在编写我的第一个spec文件,而我不明白的一件事是如何让它变得动态。 我使用其他spec文件作为参考,并注意到许多都动态加载了名称/版本。我想知道怎么做?这是一个例子:

http://svn.apache.org/repos/asf/hbase/branches/0.94/src/packages/rpm/spec/hbase.spec

主要是我想知道这些部分是什么意思:

%define _source      @package.name@
%define _final_name  @final.name@ 
%define _prefix      @package.prefix@
%define _bin_dir     %{_prefix}/bin 
%define _conf_dir    @package.conf.dir@
%define _include_dir %{_prefix}/include
....

另外我想知道{_prefix}到底是什么意思?

抱歉新手问题。我在找到这方面的信息方面遇到了一些不寻常的麻烦。

1 个答案:

答案 0 :(得分:0)

%{_prefix}(以及许多其他宏)在/usr/lib/rpm/macros中定义。它们由rpmbuild读取,并在解析spec文件时替换。 %{_prefix}具体表示在将文件安装到根文件系统时使用的安装前缀。这通常是/usr/usr/lib/rpm/macros*中的宏根据文件系统布局和正在构建程序包的分发的打包约定来定义路径和更多。例如,发行版可能由于某种原因想要在/foo/bin中安装所有二进制文件,在这种情况下,它会发送一个宏文件,并相应地设置%{_bindir}宏。

@之间的所有键(例如@package.name@通常表示autoconf变量的占位符,在运行autoconf时会替换它们,请参阅[1]。这些通常用于在配置源包时从模板(包括所述@分隔的占位符)自动生成适当的文件(在本例中为spec文件)。

就传递其他变量而言,这里有一些选项[2]。当用户希望能够动态控制包的某些方面时,可以使用这些。

[1] http://www.gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.69/html_node/Setting-Output-Variables.html

[2] How to pass user defined parameters to rpmbuild to fill variables