代码之家  ›  专栏  ›  技术社区  ›  Laserallan

在Windows中构建Boost的子集

  •  13
  • Laserallan  · 技术社区  · 16 年前

    我正在尝试设置boost的一个子集,并使用bjam对其进行正确编译,但是我没有得到我想要的结果。我正在使用Boost1.37.0开发Windows。

    假设我希望构建/安装智能库和文件系统。我特意选择了一个只有头的库和一个需要编译库的库。我希望它们被构建成一个目录结构,类似于如果我用bjam构建一个完整的boost安装(即没有指定任何——使用libraryx),但当然没有我不感兴趣的所有库。

    我的第一个方法是在bjam中使用--with-filesystem--with-smart-ptr,但是它似乎无法识别smart-ptr(我尝试了smart ptr和smart-ptr,但没有成功)。我想这是因为它是一个只包含标题的库。

    当我删除它并且只使用了文件系统时,它似乎将所有库头文件复制到安装路径,并且只为文件系统构建库。图书馆的构建行为是我所希望的,但是我在我的boost目录中安装了大量不感兴趣的库头文件。

    我的第二种方法是使用BCP复制相关的项目。这确实在我只得到我关心的项目(以及它们的依赖性)的意义上实现了。但是他们没有提供任何make文件来构建复制的库。这意味着我需要为所有库设置项目文件,而不仅仅是头文件,并手动构建它们。

    所以我的问题是,有没有一种方法可以选择性地构建Boost,它只复制我感兴趣的库的头文件,并且只为我感兴趣的非头文件库(以及它们依赖于课程的Boost库)构建库文件?

    可能有很多基于手动/脚本的解决方案可以解决这个问题,但是如果我可以只使用bjam来运行一些东西,那么对我来说就更有用了,因为添加新库或升级到新的boost版本非常简单。

    编辑: 为第一种方法添加了完整的命令行:

    bjam install --prefix=c:\temp\boostsmall 
       --build-dir=C:\temp\boostsmalltemp --layout=system 
       --with-filesystem variant=debug link=static threading=multi
       runtime-link=static
    

    已将范围指针更改为智能指针

    2 回复  |  直到 10 年前
        1
  •  5
  •   Laserallan    16 年前

    解决了它。

    bcp解决方案已经为项目创建了文件,但是我需要将tools目录和boost目录的根目录复制到我复制所有libs以使其正常运行的位置。

        2
  •  2
  •   AndyUK    10 年前

    好问题!我想这是我最近设法解决的一个问题。

    我已经安装了完整的boost库,包括那些需要单独编译的库。

    我使用以下步骤为我正在开发的特定应用程序创建了Boost库(regex)的子集:

    1. 首先确保首先安装了BCP可执行文件。在boost根文件夹中,导航到tools/bcp文件夹并在此处运行bjam.exe。对于我来说,这在[boost path]\bin.v2\tools\bcp\msvc-10.0\release\link静态目录中创建了bcp可执行文件:

    2. 然后创建希望Boost子集驻留的文件夹。这可能已经是您正在处理的Visual Studio项目的文件夹。

    3. 运行您创建的bcp exectubale,确保包含您想要包含的库,以及boost根目录和目标文件夹的位置。观察所需的增强组件(如regex)是如何包含在目标文件夹中的。

      bcp.exe regex--boost=“c:\program files\boost_1_55_0\boost_1_55_0”c:\projects\regexproject\boostlite

    4. 在您的Visual Studio项目中,将附加的include目录和库设置为指向创建的“boost-lite”文件夹。

    5. 最后一件事-我认为这是前面描述的-我需要到我的常规boost文件夹设置和复制所需的stage/lib文件夹包含所有的lib文件需要的子集版本和复制他们在这里,在我的情况下,只有几个regex相关的lib文件。

    我发现这对我有用。如果有其他人的经验反馈,我们将不胜感激。

    blog posting 在这里可以找到描述相同事物的方法。