2012-04-19 90 views
29

我有一個spec文件。我需要%定義一個spec變量,它從系統上的一行文件中獲取它的值。RPM spec文件 - 是否可以動態填充規格文件變量

例如

%define path `cat /home/user/path_file` 

和path_file是一個線

/var/www/html/hosts 

這部分的工作原理。我說,從RPM BUILD輸出開始,有時${path}的值實際上是我的命令cat /home/user/path_file,有時值是path_file(/ var/www/html/hosts)中的行,因爲它應該是?

回答

39

您可以在spec文件的頂部使用%(cmd)定義rpmbuild變量。注意命令在括號中,而不是花括號。一個例子:

%define whoami %(whoami) 

和其他地方中的規格文件,例如腳本或構建/安裝部分,使用該變量爲正常在大括號這樣的:

echo "The user that built this is %{whoami}" 

cmd可以做任何事情,包括你的貓命令。小心 - 當另一個用戶重建spec文件時,它可能找不到該文件。因此,這將是最好使用%{} sourcedir宏是這樣的:

%define path %(cat %{sourcedir}/path_file) 

,並確保path_file是在源代碼目錄包括在規範文件中的源。

+1

很多人感謝科裏!我一直在尋找這個WEEEKS的答案!再次感謝您 – 2012-04-19 20:31:29

+0

Corey - 如果我希望/ home/user/path_file爲要運行的rpm的「必需」?我可以在我的spec文件中將它設置爲PreReq或Required參數嗎?當我嘗試要求它說文件不在那裏,它完全在那裏? – 2012-04-23 15:59:00

+0

依賴於系統上安裝的文件的PreReq等選項實際上會在rpm數據庫中查找是否存在擁有該文件的包。它不檢查文件系統是否存在該文件。 – 2012-04-23 17:31:11