Rpm

RPM 宏和引號

  • February 8, 2022

我想在一個包中包含一個文件,該文件的目錄依賴於系統。

我用

%define completions_dir "%( pkg-config --variable=completionsdir bash-completion )"

例如,我可以成功使用它

%install
make DESTDIR=${RPM_BUILD_ROOT}%{nagiospluginsdir} MANDIR=${RPM_BUILD_ROOT}%{_mandir} COMPLETIONDIR=${RPM_BUILD_ROOT}%{completions_dir} install

問題是當我必須定義文件列表時

文件在那裡。以下作品

%files
/usr/share/bash-completion/completions/check_ssl_cert

如果我使用變數

%files
%{completions_dir}/check_ssl_cert

我收到以下錯誤:

RPM build errors:
   More than one file on a line: /check_ssl_cert

調試我試過

%files
/%{completions_dir}/check_ssl_cert
%endif

在這種情況下,我得到

   File not found: /root/rpmbuild/BUILDROOT/nagios-plugins-check_ssl_cert-2.20.0-0.fc35.x86_64/"/usr/share/bash-completion/completions"/check_ssl_cert

路徑是正確的,但引號是個問題。

如何使用宏定義的路徑包含文件?

只需刪除引號:

%define completions_dir %( pkg-config --variable=completionsdir bash-completion )

代替

%define completions_dir "%( pkg-config --variable=completionsdir bash-completion )"

作為旁注 - 你應該使用%global而不是%define.

即使%{completions_dir}只是目錄,通過放置

%files
%{completions_dir}

完成工作(文件包含在 RPM 中)

引用自:https://unix.stackexchange.com/questions/689151