3

如何.rpm根据_foobar是否设置定义有条件地包含文件?定义_foobar将包含构建根目录内的绝对路径。文件在那里。

根据文档,我希望以下工作(注意:本%files节中有更多文件,但这是要点):

%files
%if %{_foobar}
%{_foobar}
%endif

但是,这给了我错误:

error: parse error in expression
error: /path/to/specfile:LINENO: parseExpressionBoolean returns -1

其中/path/to/specfile:LINENO.spec文件的路径和带有 . 的行的行号%if

4

2 回答 2

6

感谢这篇博文,我找到了一个适合我的版本:

%files
%if %{?_foobar:1}%{!?_foobar:0}
%{_foobar}
%endif

%if 1如果设置了定义,那么它的作用是扩展,%if 0否则。

如果其他人有更好的解决方案,请回答。我当然更愿意接受别人的回答而不是我自己的回答。

于 2013-09-12T23:14:13.643 回答
4

这就是我解决问题的方法

步骤1 :

   In Build section .. somewhere I wrote :
 %build
  .....
  #check my condition here & if true define some macro
  %define is_valid %( if [ -f /usr/bin/myfile ]; then echo "1" ; else echo "0"; fi )
 #after his normal continuation
 .....
 ...

第 2 步:在安装部分

  %install
  ......
  #do something in that condition
  if %is_valid
  install -m 0644 <file>
  %endif
  #rest all your stuff
  ................

第 3 步:在文件部分

   %files
   if %is_valid 
   %{_dir}/<file>
   %endif

而已

有用。

PS:我不能给你完整的代码,因此给出所有有用的片段

于 2015-02-05T12:40:46.147 回答