我们一直在我们公司面临类似的问题。在构建环境中管理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