Linux rpmbuild使用.spec文件删除生成目录

Linux rpmbuild使用.spec文件删除生成目录,linux,rpm,rpmbuild,Linux,Rpm,Rpmbuild,我正在使用.spec文件尝试rpmbuild(4.11.3),但它会删除builddirectory,我希望rpmbuild不要删除我的build目录中的任何文件,因为在构建RPM之后,我需要它们来执行其他操作。我尝试使用-bi选项,但它不起作用,它删除了构建目录 以下是规范文件: Name: newfile Version: 1.0 Release: 1%{?dist} AutoReqProv: no Prereq: /bin/chmod Prereq: /bin/chown S

我正在使用.spec文件尝试rpmbuild(4.11.3),但它会删除builddirectory,我希望rpmbuild不要删除我的build目录中的任何文件,因为在构建RPM之后,我需要它们来执行其他操作。我尝试使用-bi选项,但它不起作用,它删除了构建目录

以下是规范文件:

 Name: newfile
 Version: 1.0
 Release: 1%{?dist}
 AutoReqProv: no
 Prereq: /bin/chmod
 Prereq: /bin/chown
 Summary: Testing 
 %description
 TBD
 %install

 mkdir -p $RPM_BUILD_ROOT/test/opb

 %files -f testingfiles.files
 %defattr(-,root,root,755)
 %dir /test/opb
 %dir /test/opb
 %dir /test/opb/new
 %dir /test/opb/new1
 %dir /test/opb/new2
 %dir /test/opb/new2
命令:

 /usr/bin/rpmbuild --define '_tmppath /var/tmp/rpmgen24431.d' --define '_topdir pkg/tst' -bi --buildroot /testing/new/dest pkg/tst/newfile.spec
它删除/testing/new/dest中的所有文件。如何在不删除生成文件的情况下创建rpm文件。

您可以添加:

%define __spec_install_pre /bin/true
在你的等级库文件上

但我真的很惭愧提供这个答案,因为你的规范已经充满了黑客,这只是增加了另一层肮脏的黑客。与其问这个问题,不如问一下如何通过定期清理buildroot实现您想要实现的目标

编辑: __spec_install_pre定义为:

__spec_install_pre %{___build_pre}
    [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf "${RPM_BUILD_ROOT}"
    mkdir -p `dirname "$RPM_BUILD_ROOT"`
    mkdir "$RPM_BUILD_ROOT"
%{nil}
因此,如果您将其定义为:

%{___build_pre}
    mkdir -p `dirname "$RPM_BUILD_ROOT"`
    mkdir "$RPM_BUILD_ROOT"
%{nil}
它的行为将完全相同,只是不删除buildroot。
多行%define可以通过两种方式定义,这取决于rpm的版本。我将把它留给您:)

是否有理由不在spec文件中使用一个或多个
Source
指令?