代码之家  ›  专栏  ›  技术社区  ›  Edan Maor

在Windows上使用Boost(Visual Studio)

  •  5
  • Edan Maor  · 技术社区  · 16 年前

    我想开始使用Boost。我在VisualStudio(显然是在Windows机器上)编程C++程序。

    增压器 Getting Started Guide 说:

    最简单的方法是获得一份Boost副本 使用安装程序。 本入门指南的Boost网站版本将在安装程序可用时提供未注明日期的信息,或参见BoostPro Computing提供的Boost下载或安装程序。 如果您使用Microsoft Visual Studio,我们特别建议您使用安装程序 因为安装程序可以下载和安装预编译的库二进制文件,这样就省去了自己构建它们的麻烦。

    我有点不确定我是想遵循这个建议,还是自己下载和构建所有东西。我在安装程序中看到的潜在问题是:

    1. 事情不再是独立的(即每个团队成员都必须安装Boost,然后配置Visual Studio来识别它)。
    2. 我不能将Boost保持在源代码管理下(理想情况下,我希望它像其他所有东西一样成为源代码管理中的soure文件)。( 编辑 :从评论来看,它看起来有点大(如5GB!)很明显,我只需要将其中的一部分保持在源代码控制之下)。

    所以我的问题是,我只是偏执,应该走安装路线,还是我是正确的,应该自己构建?如果有人有使用Boost和Visual Studio的经验,我会很感激他们是否可以分享他们对此的看法(如果应该是自己构建,也会感谢任何提示,例如,我应该只复制我实际使用的每个文件吗?等等)。

    注:

    关于stackoverflow的一些类似问题,但是没有明确地提出这个问题,这让我觉得我不应该使用安装程序,这就是我在这里明确地提出这个问题的原因。以下是供参考的问题:

    1. Boost linking, Visual Studio & version control
    2. Including Relevant Boost Libraries with C++ Source (Using Visual Studio)
    10 回复  |  直到 9 年前
        1
  •  8
  •   Brian R. Bondy    16 年前

    确保每个人都配置正确的一个好方法是使用SVN外部。你可以创造出 /trunk/boost1.35 然后你可以用一个SVN外部来指向它。

    这样,当新版本的Boost出现时,您只需将您的SVN重新插入到 /trunk/boost1.40

    在存储库中,SVN外部指向存储库中的SVN文件夹。例子 /depends/boost

    我们个人将Boost头文件保存在源代码控制下,如前所述,但是将libs保存为一个压缩文件,我们要求每个人都下载它。我们有一个环境变量,类似于下面的boost-lib,我们将它指向当前的boost-library目录。

        2
  •  3
  •   ravenspoint    16 年前

    我建议使用安装程序。

    自己动手做并不难。程序如下:

        Download boost into C:\Program Files\boost\boost_1_40_0
    
    
    Open the command prompt and change your current directory to the Boost root directory
    
    bootstrap
    
    .\bjam
    
    The library binaries are now sprinkled through the folders under 
    C:\Program Files\boost\boost_1_40_0\bin.v2 
    Find the required libraries and copy them to 
    C:\Program Files\boost\boost_1_40_0\lib
    
    ( Do not confuse folders called lib and libs! )
    

    然而,这足够慢,足够复杂,尤其是最后一步,你和其他人可能会偶尔搞砸一些事情,导致浪费许多小时来整理神秘的构建错误——这是我的经验。
        3
  •  2
  •   DevSolar    16 年前

    我已经在窗户下安装了Boost。它的“bjam”安装工具自动检测MSVC并将其用于编译;我对构建自己没有任何保留。这只比“配置制造安装”稍微困难一点。

    建立自己甚至可以 必要的 ,因为联机提供的boost libs不包括icu(unicode)支持,例如对boost-regex lib的支持。

        4
  •  1
  •   Stack Overflow is garbage    16 年前
    1. 事情不再是独立的(即每个团队成员都必须安装Boost,然后配置Visual Studio来识别它)。
    2. 我不能将Boost保持在源代码管理下(理想情况下,我希望它像其他所有东西一样成为源代码管理中的soure文件)。

    在将Boost置于源代码控制之下之前,请记住编译后的库占用了几千GB。(我的boost文件夹大约是5GB)让每个人自己安装boost可能是值得的。

    除此之外,安装程序应该可以很好地工作,但自己编译也非常简单。

    默认情况下,Boost会安装到特定于版本的文件夹中(如果您自己编译它,或者使用安装程序),因此很容易同时安装多个版本。因此,如果您的团队将boost升级到新版本,您可以简单地更改.sln或.vsprops文件中的include路径,以使编译器搜索新版本--如果同事没有安装正确的版本,他将无法生成(这可能比使用旧版本进行静默生成更好)。

        5
  •  1
  •   the_mandrill    16 年前

    另一个需要考虑的问题是你是否需要全部或部分的提升。我们在这里所做的是将源代码置于版本控制中,并为我们实际想要使用的库创建一个单独的包装器项目。每个库的编写都非常干净,只需将所有cpp文件放到一个新的Visual Studio项目中即可。您可能需要设置顶级配置头(我认为我将其设置为强制包含),并且整个构建过程非常容易。在解决方案中添加此项目作为依赖项,这意味着您可以将所有二进制文件保留在SCM之外,还可以确保每个人都始终是最新的。

    大部分的增强都是头文件,所以你可能会发现只有少数几个库是你想要构建的。这种方法也使您更容易匹配您的vs项目设置。

        6
  •  1
  •   T.E.D.    16 年前

    我们实际上创建了自己的安装程序,只需要在我们的工作中使用Boost的一部分,然后将其分发给IT人员,以便在开发人员机器上安装。我们还将boost的副本保存在修订控制中,这样我们就可以正确地跟踪它和系统其余部分之间的依赖关系,并自己构建它。

    我想这是两个世界中最糟糕的。但它给了我们最大的控制。

        7
  •  0
  •   EFraim    16 年前

    有几点不能让它受源代码管理:

    1. 提升是巨大的。
    2. 编译是非常重要的(特别是对于几种配置)
    3. 编译很长(您不希望每个开发人员都这样做)

    我个人不需要自己去构建它——例如,在Linux上,我总是使用发行版提供的包。

        8
  •  0
  •   Jeff Paquette    16 年前

    我将使用安装程序,除非您需要自定义构建标志。这要容易得多,而建立动力(至少在我上次这样做的时候)并不是最清楚的过程。没有什么能阻止您下载与安装程序提供的Boost版本匹配的源代码,并将其置于版本控制中。这是我过去为其他库(NSS、iPlanet SDK)使用的方法,它运行得很好。

        9
  •  0
  •   Sergei    16 年前

    我建议首先运行bootstrap.bat-它将生成bjam.exe,然后

    bjam --stagedir="c:\Program Files\Boost" --build-type=complete --toolset=msvc-9.0 --with-regex --with-date_time --with-thread --with-signals --with-system --with-filesystem --with-program_options stage
    
    bjam --stagedir="c:\Program Files\Boost" --build-type=complete --toolset=msvc-10.0 --with-regex --with-date_time --with-thread --with-signals --with-system --with-filesystem --with-program_options stage
    
    ..
    

    您只需要指定正确的工具集。它将把所有二进制文件放在..\lib文件夹中。

        10
  •  0
  •   Community Mohan Dere    8 年前

    我想说的是,把Boost安装作为项目的先决条件。手动安装只需几分钟,只需一次少量的步骤。大型综合项目, 最后 最终会依赖于Boost,所以这是一个很正常的前提条件。当然,自动化是很简单的。其优点是:

    1. 你不会在回购协议中添加巨大的提升分布
    2. 你不必选择你用的东西
    3. 其他项目可以共享安装
    4. 一次性设置还负责构建header+cpp库

    对于Visual Studio 2015和最新的Boost版本,以下是我们团队遵循的逐步说明:

    https://stackoverflow.com/a/39628306/207661