【问题标题】:Boost libraries - build only what I needBoost 库 - 只构建我需要的东西
【发布时间】:2011-06-10 12:01:22
【问题描述】:

我下载了 Boost 库,现在我只想构建几个库。什么是正确的命令?显然 built-type=complete 选项给了我太多。 我正在使用 Windows XP 并希望使用 Bjam 来编译 Boost 和 MinGW 以最终使用它。目前我认为我需要库 Boost.filesystem、Boost.ProgramOptions 和 Boost.System。 另一个问题:我在哪里放置仅标头库?

【问题讨论】:

  • 只有在为嵌入式设备构建时才需要且实用。快速计数 13408 个 *.hpp 和 264 个 *.h 文件。即使对于公共标头,也有超过一千个。在正常的系统中,许多其他的包也可能依赖于 boost 中的不同模块。

标签: c++ boost


【解决方案1】:

Getting Startedstep 5.2.4 中,您可以指示b2 要构建哪些库:

./b2 --with-program_options --with-filesystem --with-system

或者,使用./b2 --show-libraries 查看所有非标头库的列表。

以下是该页面的摘录:

特别是,为了限制构建所花费的时间,您可能对以下内容感兴趣:

  • 使用--show-libraries查看库名称列表
  • 限制使用--with-<library-name>--without-<library-name> 选项构建哪些库
  • 通过向命令行添加发布或调试来选择特定的构建变体。

注意: b2 命令取决于 boost 版本,因此请根据您的 boost 版本使用以下命令(另外,在这种情况下使用 --with-libraries=<comma-seperated-library-names> 版本而不是 --with-<library-name>):

  • ./configure 用于1.38.0 及更早的版本
  • ./bootstrap.sh for 1.39.0 一直到 1.46.0

【讨论】:

  • 好的,谢谢。我没有阅读,因为我只是查看 Windows 描述,但我认为命令行选项是相同的。你能解释一下“--prefix”和“--build-dir”选项之间的区别吗?后者只是暂时的吗?首先是安装目录吧?
  • @Till --prefix 是你想要安装 boost 的地方。在 Linux 系统上通常为 /usr/usr/local
  • 在最近的 Boost 中,将 bootstrap 替换为 b2
  • @rustyx 另外,现在的格式似乎是 --with- : ./b2 --with-filesystem --with-system
  • 我使用b2 --show-libraries 尝试获取我想要的lib 的名称。但 b2 并没有这样做,而是创建了一个目录 C:\boost-build 并在那里复制了一堆文件(例如,b2.exe、bjam.exe,...)。在 Boost.Build 文档中看不到更多信息。我是不是做错了什么?
【解决方案2】:

这些答案对我不起作用。在 Windows 上,这对我有用:

b2.exe -with-LIBRARY

例如,

b2.exe -with-test

【讨论】:

  • 至少在当前版本 (1.57) 中需要双破折号,例如b2.exe --with-filesystem
  • b2.exe --with-test 抱怨“错误:--with- 选项中的库名称 'test' 错误。”
【解决方案3】:

BCP 实用程序是用于提取 Boost 子集的工具。对于希望将库与 Boost 分开分发的 Boost 作者,以及希望在其应用程序中分发 Boost 子集的 Boost 用户,它非常有用。

当前版本的 Boost (1.50.0) 使用 Boost.Build。构建 BCP 的新工作流程如下:

在 Boost 根目录中,键入:

bootstrap.bat

然后,一旦构建了 Boost.Build,输入:

b2 tools/bcp

要提取,例如仅interprocess,您可以使用:

$ mkdir /tmp/interprocess #bcp needs this
$ bcp interprocess /tmp/interprocess

这会将进程间及其依赖项复制到/tmp/interprocess

【讨论】:

    【解决方案4】:

    我遇到了同样的问题。但我找到了创建必要文件的方法。

    要遵循的步骤:

    1. 如果您有 Microsoft Visual Studio 2010,请以管理员模式打开 Microsoft Visual Studio 命令提示符 (2010)。
    2. 先输入代码:

      bootstrap.bat
      
    3. 然后输入以下代码生成lib文件:

      b2.exe link=static runtime-link=static --with-chrono --with-date_time --with-filesystem --with-program_options --with-system --toolset=msvc-10.0 define=BOOST_USE_WINAPI_VERSION=0x0500
      
    4. 将在阶段文件夹中创建库文件。

    【讨论】:

      【解决方案5】:

      我对 Boost 1.55 库的最后一次构建尝试令人失望。构建多个库的所有尝试(只有它们)都以完全混乱的输出告终。

      BJam 要么尝试构建所有内容,要么只构建所请求的内容,但在“bin.v2/[long-random-path]”文件夹(每个目录的库)中,其中包含废话,仅复制链接令人头疼图书馆到其他地方。

      我偶然发现了在一个地方只构建和收集我想要的库而没有任何其他废话的正确方法:

      bjam ... --with-[library1] --with-[library2] 阶段

      • 需要“stage”选项才能在一个文件夹中构建和收集库:/stage/lib
      • 需要“--with-[library]”选项才能仅构建您想要的库。

      【讨论】:

      • 尝试安装而不是舞台
      • 我不想在构建机器上安装任何东西,我只想在其他地方复制它
      • 这正是 install 所做的 - 它复制了标题和链接文件。从暂存目录手动复制它是疯狂的。
      • 我不知道 install 究竟做了什么,但它还可以做任何其他事情来复制标题和链接文件。并完全根据我需要的暂存目录进行处理。
      • 任何程序都可以做任何事情——但我要告诉你,在这种情况下,安装复制出头文件和二进制文件,而不做其他任何事情。
      【解决方案6】:

      对于看到错误消息的任何人的附加说明: "error: wrong library name '<name of library>' in the --with-<library> option.".

      如果你像我一样聪明,只将下载的 boost 子目录提取到你的系统上以最小化空间,b2 将无法找到源代码和构建选项那些不是仅标头的库。 IE。你也需要lib 子目录(和tools)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-04-03
        • 2018-08-25
        • 1970-01-01
        • 2019-04-28
        • 2019-03-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多