2013-02-02 48 views
12

我試圖將我們的構建系統轉換爲cmake,並且遇到了它生成的RPM(通過cpack)的一個有趣問題:它會自動將它認爲您的RPM具有的所有依賴關係添加到其列表中需要的庫。你如何做到這一點,使cpack不會將所需的庫添加到RPM?

一般來說,這很好,但在我的情況下,這是災難性的。不幸的是,我們構建的開發包最終使用一個我們自己開發的工具進行安裝,該工具使用rpm將它們安裝在與系統分開的RPM數據庫中。這很愚蠢,但我無法改變它。這意味着任何普通庫所依賴的所有系統庫(如libc或libpthread)都不在我們的開發包中使用的RPM數據庫中。因此,如果我們的某個開發包的RPM列出了需要的系統庫,那麼我們無法安裝它,因爲rpm會認爲它們沒有安裝(因爲它們是在正常數據庫中列出的,而不是一個它被告知在安裝我們的軟件包時使用)。我們當前的構建工具可以很好地處理這個問題,因爲它沒有將任何系統庫列爲RPM中的依賴項,但cpack會自動填充RPM所需庫的列表,並將系統庫放入其中。我需要一種方法來阻止它這樣做。

我嘗試將CPACK_RPM_PACKAGE_REQUIRES設置爲"",但這沒有效果。 RPM cpack生成的最終還是系統庫列爲必需的。我現在所能想到的就是複製RPM cpack生成器,並將其破解並做出我想要的,然後用它來代替標準的,但我寧願避免這種情況。有沒有人有任何想法如何讓cpack停止使用所需的庫來填充RPM?

回答

9

http://www.rpm.org/max-rpm/s1-rpm-depend-auto-depend.html

的autoreqprov標籤底部 - 禁用自動依存性處理

時不希望RPM的自動依賴加工有時可能。在這些情況下,autoreqprov標籤可用於禁用它。該標籤採用是/否或0/1值。例如,要禁用自動依賴性處理,下面的行可用於:

AutoReqProv:沒有

編輯:

爲了設置這個在cmake的,你需要做的set(CPACK_RPM_PACKAGE_AUTOREQPROV " no")額外的空間似乎需要在no(或後面)否爲了它的工作。似乎cpack的RPM模塊有一個錯誤,它使它不會讓你設置一些變量爲短於3個字符的任何東西。

+1

這聽起來像我需要設置,但問題是如何使用cmake和cpack來做到這一點? –

+1

好的。你的答案並沒有給我所需要的所有信息,但是足夠了解如何解決這個問題,所以我更新了答案,包含了關於如何使用cmake設置'AutoReqProv'的說明。 –

相關問題