rpmbuild %clean 阶段不删除文件

Posted

技术标签:

【中文标题】rpmbuild %clean 阶段不删除文件【英文标题】:rpmbuild %clean phase without removing files 【发布时间】:2012-11-29 14:19:04 【问题描述】:

我在构建日志中得到以下信息:

Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.CgE2Qn
+ umask 022
+ cd /export/home/svn_checkouts/*snip*/Output/release/bin/packaging/BUILD
+ /bin/rm -rf /export/home/svn_checkouts/*snip*/Output/release/bin
+ exit 0

我想避免rpmbuild 删除我构建目录中的所有文件,因为在构建 RPM 后我需要它们来做其他事情。我可以覆盖此行为吗?

我读到某些版本的 RPM 支持 --noclean 参数,但不幸的是我们不支持。

【问题讨论】:

【参考方案1】:

原来我只需要在规范文件中提供我自己的%clean 指令并将其留空以覆盖默认值。出于某种原因,我没想到它会起作用。 ;)

定义可以条件化 %Clean% 阶段,从而可以达到与--noclean 相同的效果。

%Clean
%if "%noclean" == ""
   rm -rf $RPM_BUILD_ROOT
%endif

使用rpmbuild --define 'noclean 1' 调用以禁用清理。

【讨论】:

唉,这不适用于 RPM 版本 4.11.1:如果 noclean 未定义,则 %noclean 将扩展为 % noclean (没有空格)而不是空字符串。 【参考方案2】:

对于spec-file 构建rpmbuild 具有-bi 选项。它使$RPM_BUILD_ROOT 保持原样;它没有%clean

  -bi     build through %install (%prep, %build, then install) from <specfile>

(rpmbuild --help)


对于SRPM构建(源 RPM 包;yumdownloader 将为您提供这些),还有--recompile 选项:

 --rebuild    build binary package from <source package>
 --recompile  build through %install (%prep, %build, then install) from <source package>

最后,rpmbuild 有一个 --noclean 选项——但在我的情况下 (RPM version 4.11.3) 它不起作用。

【讨论】:

以上是关于rpmbuild %clean 阶段不删除文件的主要内容,如果未能解决你的问题,请参考以下文章

idea lifecycle生命周期

git clean使用总结

eclipse如何彻底删除项目?

android studio 里面build,clean区别

clean-webpack-plugin

git基础教程(16)git clean清理未被track的文件和目录