【问题标题】:Using Boost on Windows (Visual Studio)在 Windows 上使用 Boost (Visual Studio)
【发布时间】:2010-12-19 21:41:32
【问题描述】:

我想开始使用 Boost。我正在 Visual Studio 中编写 C++ 程序(显然是在 Windows 机器上)。

Boost 的 Getting Started Guide 说:

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

我有点不确定我是想听从这个建议,还是自己下载并构建所有内容。我在安装程序中看到的潜在问题是:

  1. 事物不再是独立的(即每个团队成员都必须安装 Boost,然后配置 Visual Studio 以识别它)。
  2. 我无法将 Boost 置于源代码控制之下(我希望它像其他所有文件一样在我的源代码控制中成为错误文件)。 (编辑:从 cmets 看来,boost 看起来有点大(如 5 GB!),所以显然我只需要将它的一部分保留在源代码控制之下)。

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

注意:

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

  1. Boost linking, Visual Studio & version control
  2. Including Relevant Boost Libraries with C++ Source (Using Visual Studio)

【问题讨论】:

  • @Edan:感谢您在帖子中包含 2 个链接。 +1

标签: c++ windows visual-studio visual-c++ boost


【解决方案1】:

确保每个人都正确配置所有内容的好方法是使用 svn externals。您可以创建类似/trunk/boost1.35 的内容,然后您可以使用 svn external 指向它。

这样,当新版本的 boost 出现时,你只需将你的 svn 重新指向/trunk/boost1.40

在您的存储库中,您的 svn external 指向存储库中的 svn 文件夹。示例/depends/boost

我们个人将 boost 头文件保存在所描述的源代码控制下,但将库保存为 zip,我们要求每个人都下载。我们有一个类似于以下 BOOST_LIB 的环境变量,我们将其指向当前的 boost 库目录。

【讨论】:

    【解决方案2】:

    我建议使用安装程序。

    自己构建并不难。流程如下:

    将 boost 下载到 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! )
    

    然而,这已经够慢,也够复杂,尤其是最后一步,你和其他人可能会偶尔搞砸一些事情,导致浪费很多时间来解决神秘的构建错误——这就是我的经验。

    【讨论】:

    • 感谢您的回复,您能否解释一下为什么我需要将库从 libs 复制到 lib 中?您说不要混淆它们,实际上 Boost 网站上的教程本身说要完全按照您说的那样构建,但是然后将 Visual Studio 指向 C:\Program Files\boost\boost_1_40_1\lib, no s,即使它没有不存在。它没有提到必须复制到 lib 的任何内容。有什么我想念的吗?为什么会出现差异?
    • 我不知道为什么。我确实知道,当我按照我描述的过程进行操作时,这是必要的 - 库二进制文件不在 /lib 中,而是散布在 /bin.v2 中。也许这是一个错误,现在修复了?当你尝试它时会发生什么?图书馆是否在您不必移动它们的情况下最终位于正确的位置?
    • 在以前的版本中可能存在各种不便,但在 1.40 中,在没有任何选项的情况下运行“bjam”,会将库放入“stage\lib”。您无需手动复制任何内容。
    • 我正在构建 1.40 我想知道 - 我是唯一一个这不起作用的人 - 即必须手动复制库吗?
    • @Vladimir Prus:感谢您的提醒,我没有意识到这一点。我可能错过了它,但我认为它没有记录在 Boost 文档中......
    【解决方案3】:

    我已经在 Windows 下构建了 Boost。它的“bjam”安装工具自动检测MSVC并使用它进行编译;我不会对建立自己有任何保留。它只比“./configure && make && make install”稍微难一点,真的。

    构建自己甚至可能是必要的,因为在线提供的 Boost 库不包括 ICU (Unicode) 支持,例如对于 boost_regex 库。

    【讨论】:

    • 关于 Unicode 支持的有趣说明,这绝对是我未来项目中需要的东西。
    【解决方案4】:
    1. 事物不再是独立的(即每个团队成员都必须安装 Boost,然后配置 Visual Studio 以识别它)。
    2. 我无法将 Boost 置于源代码控制之下(我希望它像其他所有文件一样在我的源代码控制中成为错误文件)。

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

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

    默认情况下,Boost 会安装到特定于版本的文件夹中(无论是您自己编译还是使用安装程序),因此并排安装多个版本很容易。因此,如果您的团队将 Boost 升级到新版本,您可以简单地更改 .sln 或 .vsprops 文件中的包含路径,以使编译器搜索新版本——如果同事没有安装正确的版本,他只需将无法构建(这可能比使用旧版本静默构建更可取)

    【讨论】:

    • 每个人为自己安装它的真正问题在于,它使升级到新版本变得非常困难。你必须让每个人同时跳跃,跨越所有代码分支。
    • 是的。但同样,每个单独的开发人员都会收到通知,因为如果他们尝试构建依赖于他们没有的 Boost 版本的分支,他们会收到构建错误。我并不是说这是一个完美的解决方案,只是将 5GB 的编译文件放在源代码管理中似乎也不理想。也许它(它的所有使用版本)应该安装在每个人都可以访问的共享网络文件夹中,允许集中安装新版本而不会打扰个别开发人员。
    【解决方案5】:

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

    无论如何,大部分的提升都是仅限于标头的,因此您可能会发现您想要构建的库屈指可数。这种方法也可以让您更轻松地匹配您的 VS 项目设置。

    【讨论】:

      【解决方案6】:

      我们实际上创建了自己的安装程序,其中仅包含我们在工作中使用的 Boost 部分,并将其提供给 IT 人员以安装在开发人员的机器上。我们还在修订控制中保留了 boost 的副本,因此我们可以正确地跟踪它与系统其余部分之间的依赖关系,并自己构建它。

      我认为在工作方面这是两全其美的。但它确实给了我们最大的控制权。

      【讨论】:

        【解决方案7】:

        不要将其置于源代码控制之下的几点:

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

        我个人不会费心自己构建它 - 例如在 Linux 上,我总是使用发行版提供的包。

        【讨论】:

        • 3) 恕我直言,这并不是一个真正的问题,因为它是一次性操作。哎呀,你甚至可以做一次,然后将编译后的代码作为 ZIP 传递。
        • @DevSolar - 如果您正在这样做,那么没有理由不使用安装程序。
        【解决方案8】:

        我会使用安装程序,除非您需要自定义构建标志。这要容易得多,而且构建提升(至少我上次这样做)并不是最清晰的过程。没有什么能阻止您下载与安装程序为您提供的 boost 版本相匹配的源代码,并将其置于版本控制中。这是我过去用于其他库(nss、iplanet sdk)的方法,效果很好。

        【讨论】:

          【解决方案9】:

          我建议先运行 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】:

            我想说,只需将 Boost 安装作为您项目的先决条件。手动安装只需几分钟,一次性少量步骤。大多数大型复杂项目,最终最终会依赖 Boost,因此将其作为先决条件并不罕见。当然,自动化它是微不足道的。优点是:

            1. 您没有在您的 repo 中添加巨大的 Boost 发行版
            2. 您不必挑选自己使用的东西
            3. 其他项目可以共享安装
            4. 一次性设置还负责构建 header+cpp 库

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

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

            【讨论】:

              猜你喜欢
              • 2020-03-23
              • 2012-03-12
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2019-09-25
              相关资源
              最近更新 更多