我們一直在我們公司面臨類似的問題。在構建環境中管理boost版本絕非易事。擁有10多個開發人員,所有編碼都在他們自己的系統上,您將需要某種自動化。首先,我認爲在SVN或任何SCM系統中存儲類似boost的大型庫的副本並不是一個好主意,但這不是這些系統設計的目的,除非您計劃在boost中修改代碼你自己。但讓我們假設你沒有這樣做。
下面是我們現在如何管理它,嘗試了很多不同的方法後,這對我們最有效。
對於我們使用的每種boost版本,我們將整個樹(解壓縮)放在一個文件服務器上,並且爲每個架構/編譯器組合添加額外的子目錄,其中放置編譯的庫。 我們保持每構建系統上這些樹的副本,並在全局系統環境中,我們添加變量一樣:
BOOST_1_48=C:\boost\1.48 # Windows environment var
或
BOOST_1_48=/usr/local/boost/1.48 # Linux environment var, e.g. in /etc/profile.d/boost.sh
該目錄包含升壓樹(升壓/ * HPP)和所添加的預編譯庫(例如lib/win/x64/msvc2010/libboost_system * .lib,...)
所有構建配置(vs解決方案,vs屬性文件,gnu makefiles,...)定義一個內部變量,導入環境變量,如:
BOOSTROOT=$(BOOST_1_48) # e.g. in a Makefile, or an included Makefile
和進一步的構建規則都使用BOOSTROOT設置來定義包括路徑和庫搜索路徑,例如,
CXXFLAGS += -I$(BOOSTROOT)
LFLAGS += -L$(BOOSTROOT)/lib/linux/x64/ubuntu/precise
LFLAGS += -lboost_date_time
保留本地副本的原因是編譯速度。它佔用了相當多的磁盤空間,尤其是編譯後的庫,但是存儲成本低廉,而且開發人員不會花費大量時間編譯代碼。另外,這隻需要複製一次。
使用全局環境變量的原因是構建配置可以從一個系統轉移到另一個系統,因此可以安全地檢入您的SCM系統。
爲了使事情平滑一些,我們開發了一個小工具,負責複製和設置全球環境。使用CLI,甚至可以將其包含在構建過程中。
不同的工作環境意味着不同的規則和文化,但相信我,我們已經嘗試了很多東西,最後,我們決定定義某種約定。也許我們可以激勵你...
來源
2012-06-19 08:43:41
Pat
如果您使用'g ++',爲什麼不使用'gzip'來匹配?哈哈糟糕的笑話+1。 –
從SVN轉移到現代SCM系統?或者,您可以將boost目錄壓縮到SVN中,以便快速結帳,然後在必要時讓部分構建過程解壓縮該文件。 – bames53
@ bames53想到了。由於提取了許多小文件,它不會在Windows上節省太多時間。當然,這會更好一些。 – Notinlist