Rpmbuild rpm子包%install部分

Rpmbuild rpm子包%install部分,rpmbuild,rpm-spec,Rpmbuild,Rpm Spec,是否可以在规范文件中为子包单独设置%install部分 例如,可以将主包的文件指定为 %files 对于这样的子包: %files mysubpackage Name: library # probably some other fields... %description describre library %package devel Summary: headers for library %description devel describe library-devel pac

是否可以在规范文件中为子包单独设置%install部分

例如,可以将主包的文件指定为

%files
对于这样的子包:

%files mysubpackage
Name: library
# probably some other fields...

%description
describre library

%package devel
Summary: headers for library

%description devel
describe library-devel package

%prep
# some common prep code for both packages; eg
%setup -q

%build
make (or whatever to build your program)

%install
# install files for both rpm packages; library AND headers
mkdir -p ${RPM_BUILD_ROOT}/%_libdir/
mkdir -p ${RPM_BUILD_ROOT}/usr/include/

cp library.so* ${RPM_BUILD_ROOT}/%_libdir/
cp include/*.h* ${RPM_BUILD_ROOT}/usr/include/

%files
%defattr(-,root,root)
%_libdir/*.so.*

%files devel
%defattr(-,root,root)
%_libdir/*.so # yes; if you use version numbers; the versioned .so go in the normal package; the one without version number in the devel package
/usr/include/*
然而,我只看到一个

%install
节,如果我这样做,我会得到一个错误

%install mysubpackage

不可以,您不需要单独的%install部分

让我们假设一个典型的例子:您编译一个程序并想要创建两个包;library.rpm和library-devel.rpm(带标题)。然后您将有一个类似以下内容的规范文件:

%files mysubpackage
Name: library
# probably some other fields...

%description
describre library

%package devel
Summary: headers for library

%description devel
describe library-devel package

%prep
# some common prep code for both packages; eg
%setup -q

%build
make (or whatever to build your program)

%install
# install files for both rpm packages; library AND headers
mkdir -p ${RPM_BUILD_ROOT}/%_libdir/
mkdir -p ${RPM_BUILD_ROOT}/usr/include/

cp library.so* ${RPM_BUILD_ROOT}/%_libdir/
cp include/*.h* ${RPM_BUILD_ROOT}/usr/include/

%files
%defattr(-,root,root)
%_libdir/*.so.*

%files devel
%defattr(-,root,root)
%_libdir/*.so # yes; if you use version numbers; the versioned .so go in the normal package; the one without version number in the devel package
/usr/include/*

进一步阅读:

请记住-
%install
是在RPM构建时进行的。Scriptlet在安装时执行,例如,
%post
。这些允许子包。呃,我有点困惑,这是怎么工作的?安装部分是否自动为每个命令选择正确的rpm?它们可以单独安装,是吗?在
%install
中为所有(子)包安装所有文件,在
%files
部分进行分离,每个(子)包都不同。啊,好吧,我的误解是,我认为安装部分中的命令也打包在RPM中。嗯,但是一旦你建立了RPM。他们怎么知道在哪里安装什么?实际上这很有帮助。谢谢