2011-07-26 115 views
6

有没有办法大幅度减少提升所需的头文件的数量?理想情况下,我要求Boost人员找到一种方法来缩小产品尺寸。但同时,有没有办法包含boost,但是没有几千个头文件需要处理?处理Boost头文件

是否有一个C++机制可以将数千个头文件“捆绑”成一个“包”,并将这个单个文件检入源代码控制?

我想这里的问题是源代码管理。对所有这些文件进行处理时,执行diff,svn st和check out是非常缓慢的。

+3

只有第一次签入/签出速度很慢,但是正确吗?我怀疑你正在对boost头文件进行重大更改,因此一旦它们在第一次结帐时被下载,后续签出就不必更新版本。这是假设你的源代码控制机制是相对理智的。 – Chad

+2

除了Chad说的话之外,我倾向于不检查第三方库到源代码控制中,除非我计划自己修改代码。相反,只需将库存档,并在项目中包含有关如何编译的构建指令。 – Praetorian

+0

“处理”是什么意思?我发现使用预编译头文件可以成为一个真正的编译器,在使用Boost.GIL时,可以将小编程的编译速度从10+秒加速到几分之一秒。 –

回答

9

Boost提供了一个名为BCP的工具。 BCP允许您提取增强的子集。它还可以分析源代码树并只提取源代码树使用的Boost组件。

2

我建议把你的第三方库放在一个单独的版本库中。 Boost模板很重,所以他们不要捆绑头文件是一个很好的理由。试图包含捆绑的boost文件头会将您的“浪费”时间从版本控制转移到构建时间。这并没有真正的规模。我会拒绝使用提升,如果你试图这样做我的提升标题。

你之前问过类似的问题,我想我仍然不确定你想要解决哪些技术限制。

0

没有办法将所有文件打包在一个文件中(除了对存档进行版本控制,但这不是很好的做法,也不是实用的)。另一方面,Subversion在检查数千个小文件(比如boost头文件)方面速度很慢,所以也许你可以考虑切换到像Git这样的更高性能的SCM。

您会对bcp感兴趣,它是一款Boost工具,可以分析您的源代码并将其复制到您使用的Boost标题的单独目录中。这对减少第三方文件有很大帮助,对我来说大部分都是正确的(只需在列表中添加几个)。

0

不是你问的,但这是一个解决问题的方法。据我了解,您正在将Boost文件添加到您的代码控制存储库。为什么?它们本身不属于您的项目,它们不在您的控制之下。

下面是我如何构建我的项目,使我不会遇到这样的问题。除了包括lib文件夹之外,所有内容都添加到源控件中,如下所述。 (我只显示我的目录树中的相关部分。)

  • /
    • SRC —包括我自己的源文件和头
    • EXT —外部依赖(如升压)
      • 提升-1-46-1
        • 下载。TXT —包括链接,您可以从
        • 包括—此下载正确的版本不会被添加到源代码控制
        • LIB —这既不
+0

“为什么?它们本身不属于你的项目,它们不受你控制。”有几个理由这样做。我将外部项目置于版本控制之下,以便将其分发到其他计算机(只需进行拉取,然后获得所需内容)即可。它还确保如果我意外更改了任何文件,我可以撤消这些更改。当然,如果我需要修复一个bug,它已经在版本控制之下。 –

+3

确保所有开发人员都在同一版本的第三方库是一个噩梦,如果你不把东西在版本控制。 –

+0

@Tom&Nicol:我承认我以前从来没有和一个团队一起工作过,答案是从这个角度写的。不过,拥有两个存储库不是更好:一个用于代码,一个用于第三方库? –

1

ccache可以是用于加速预处理器大量编译的生命保护程序。