2009-01-13 59 views
13

我在尝试设置增强子集并使用bjam正确编译,但是我没有得到我期待的结果。我正在使用boost 1.37.0在windows上工作。在Windows中构建增效子集

比方说,我想建立/安装库smart_ptr和文件系统。我故意选择了仅包含头文件的库和一个需要编译库的库。如果我用bjam(即不指定任何--with-libraryX)构建一个完整的boost安装,但是当然没有我不感兴趣的所有库,我希望它们被构建到类似于我将得到的目录结构中

我的第一种方法是在bjam中使用--with-filesystem --with-smart_ptr,但它好像不识别smart_ptr(我试过smartptr和smart-ptr没有成功)。我想这是因为它只是一个头文件库。

当我删除它,只有--with文件系统似乎所有库头文件复制到安装路径,只建库文件系统。图书馆的建设行为是我所希望的,但是我有很多库文件头文件,我不想安装在boost目录中。

我的第二种方法是使用bcp来复制相关项目。这确实起到了作用,因为我只获得了我关心的项目(及其依赖项)。但是他们没有提供任何构建被复制的库的make文件。这意味着我需要为所有不是标题的库设置项目文件并手动构建它们。

所以我的问题是,基本上,是有选择性地建设提升的方式,只复制标题对我很感兴趣,只有建立库文件的非头只有我感兴趣的库库(和提升他们依赖课程的图书馆)?

可能有很多基于手动/脚本的解决方案,但是如果我只能使用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 

更改使用scoped_ptr到smart_ptr

+0

我有试图获得正则表达式安装相同的问题。不过不得不复制工具目录。 – 2009-04-21 08:54:15

回答

5

解决它。

BCP的解决方案必须使文件的项目,但我需要复制的工具目录和升压目录我复制了我所有的库得到的东西时行驶的地方的根。

+0

你是如何阻止bjam复制无关头文件的? – 2009-04-22 04:24:08

2

伟大的问题!我想,这是我最近弄清楚的一个问题。

我已经安装了完整的Boost库,包括要求独立汇编的。

我设法创建Boost库(正则表达式)为我工作使用以下步骤特定应用的一个子集:

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

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

  3. 运行您创建的bcp exectubale,确保包含您希望包含的库,以及boost根目录和目标文件夹的位置。观察所需的Boost组件(例如,正则表达式)如何包含在目标文件夹中。

    正则表达式的Bcp.exe = --boost “C:\ Program Files文件\ boost_1_55_0 \ boost_1_55_0” C:\项目\ RegexProject \ BoostLite

  4. 在Visual Studio项目设置附加包含目录和库点到创建的'Boost lite'文件夹。

  5. 最后一件事 - 我想前面已经介绍过了 - 我需要进入常规的Boost文件夹设置并复制包含子版本所需的所有lib文件的所需stage/lib文件夹,并将其复制到此处在我的情况下,一些正则表达式相关的lib文件。

我发现这对我有效。任何来自其他人的经验反馈将不胜感激。

A blog posting描述同样的事情可以在这里找到。