2010-10-07 58 views
0

我有一個跨平臺的C++項目。在這個項目中,我們使用了幾個第三方,靜態編譯的庫,這些庫非常龐大且不易構建。在源代碼樹中包含預編譯的庫

目前,我們的源代碼樹是這個樣子:

| 
+-3rdparty 
| +-include (initially empty) 
| +-lib  (initially empty) 
| +-some-library 
| +-another-library 
| 
+-source 

當檢查出的代碼,開發者首先生成並安裝「一些庫」和「其他庫」。安裝步驟會將正確的文件放入include和lib文件夾,然後他們可以構建我們的項目。

爲了更容易地構建我們的項目,我正在考慮刪除「some-library」和「another-library」,而只是將include和預編譯的二進制文件放入include和lib文件夾中。這樣,一個新的開發者只需要檢查項目,並立即建立。

我的問題是:

  1. 它是一個不好的做法,這樣做呢? (即:將預編譯的庫包括到您的源代碼樹中)。

  2. 什麼潛在的問題/缺點可以從這個設置產生的?

  3. 對於幾個平臺(Windows,Mac OSX和Linux),您建議考慮哪個文件夾組織?

附加說明:我們正在使用Mercurial。

+2

可能的重複[可以(應該)我把第三方庫在版本控制?](http://stackoverflow.com/questions/1710027/can-should-i-put-3rd-party-libraries-in-版本控制) – durron597 2015-09-16 18:05:11

回答

1

我對此斷然拒絕,以保持的二進制文件的舊版本的版本控制系統的工作。那是很久以前的事了,我認爲這對目前的VCS來說不是問題,但在實現這個想法之前請先檢查一下。

如果第三方庫得到更新的頻率,你的資料庫可能會相當大。

除此之外,我已經看到了它完成,可見它的工作。

+0

感謝關於存儲庫日益增多的頻繁庫更新的提醒。 – gregschlom 2010-10-07 03:11:30

1

好,你正努力成爲跨平臺的,但你的源捆綁依賴帶有多個問題。

  • 既然你說說建築的依賴關係,你如何打算,以確保編譯後的代碼可以在開發人員的機器上運行?我懷疑Windows代碼將在OS X下運行,甚至可能不是Debian Linux下的Fedora Linux Rawhide。

  • 如果我已經有我的系統上安裝的依賴關係,我怎麼能幹淨地禁用在安裝您的版本?爲什麼我會關心在退房時下載它們?

  • 如果您打算將此代碼加入某些Linux發行版中,打包程序會對您所引入的緊密耦合產生影響,因爲您的方法在共享庫工作得很好的Linux世界中不太需要。

當然你的方法在很多地方都有,大大小小,但爲什麼要重複他們的錯誤呢?如果您確實需要爲開發人員提供安裝這些依賴關係的快捷方式,則應編寫可配置的腳本,將相關性安裝到某些前綴中。並添加一些標誌來禁用安裝特定的依賴項。

+0

謝謝,您指出了一些我不知道的特定於Linux的問題,他們更像是一個Windows用戶。 – gregschlom 2010-10-07 06:16:29

+0

我忘了提一件事:這不是一個開源項目。所以唯一的開發人員是我們的團隊3.但是您關於共享庫在Linux上受青睞的觀點確實是我們需要牢記的事情。 – gregschlom 2010-10-07 06:18:40