假設你是在一些項目上工作,支持多種配置(Linux和Windows版本,共享/靜態鏈接,一些功能或沒有,等等)。要構建所有這些配置,您需要不同版本的第三方組件(使用gcc或msvc構建,共享/靜態,以及某些指定的預處理器定義等)。所以最終你最終會遇到一個管理所有這些配置的問題,不僅僅是你的項目,而是你項目使用的所有庫。如何管理第三方庫在一個多配置項目
是否有一個通用的解決方案/方法/軟件,方便管理單個項目的幾個不同的配置?
標準:
- 易於安裝,即多少時間人會需要花費從頭開始建立你的項目?
- 易於管理的,即是很難增加新的依賴或刪除現有的一個?
- 錯誤證明,即開發人員通過更改依賴關係來破壞構建的頻率如何?
到目前爲止,我已經嘗試了多種方法。
存儲VCS下每個配置的預構建包。
優點:易於安裝,而項目很小(更新工作副本,你很好去)。易於管理(爲每個所需配置構建一次庫)。錯誤證明(VCS客戶端通知您有關工作副本的更改)。
缺點:不適用於分佈式VCS(GIT,Mercurial等)。倉庫迅速增長,最終簡單的「克隆」操作將無法容忍。您最終還會下載很多您不需要的東西(例如,如果您正在使用Linux,則需要Windows庫)。如果您正在實施圖書館,那麼圖書館的用戶將通過將其集成到他們的項目中來繼承所有這些問題。
存儲庫的來源,而不是預編譯軟件包。
優點:容易設置。
缺點:這是非常痛苦的添加新的庫。您需要爲每個配置提供構建腳本和源代碼補丁。但這只是冰山一角。你的依賴關係有它們自己的依賴關係,它們有自己的依賴關係,如此等等......你有一個很好的機會最終得到像Gentoo發佈的東西:)
存儲一個檔案或只是一個文件夾與預建打包在外部服務器上的某處。
優點:解決問題...種。
缺點:不容易設置(您必須手動複製存檔)。不是那麼容易管理(你必須手動每個庫添加到服務器)。變化史。沒有錯誤證明,因爲很容易忘記將某些東西放在服務器上,或刪除一些有用的東西。
稍微改進的方法:你可以使用集中式VCS(例如,SVN)來存儲所有第三方庫,它會更容易的工作。但是,如果您將它作爲簡單的文件存儲使用,您仍然沒有集中的更改歷史記錄,或者如果將其用作子存儲庫,則會得到大量不必要的庫。
大多數第三方庫。但正如你所提到的,這使得它們比它們可能需要的大得多。我親自編寫一個腳本來克隆/檢出/將這些庫下載到附近的文件夾,然後將它們構建爲我自己的源代碼的構建過程的一部分。最令人討厭的是,當這些庫帶有一個構建系統,迫使你啓動一個IDE並按下按鈕時。 – enobayram
@enobayram什麼樣的構建系統迫使你「啓動IDE並按下按鈕」?你如何處理這些?我的意思是,你是手動按下按鈕還是使用一些自動解決方案? – kol
@kol一些圖書館分發「項目文件」爲一個特定的IDE,比如codelite,而不是一個適當的跨平臺編譯系統,如cmake的。據我所知,(因爲我已經搜查,但沒有找到任何東西),有沒有在命令行告訴codelite建設項目的方式,所以你需要啓動它,然後按「建」。的 – enobayram