在Boost中使用多个STLport配置

时间:2014-07-16 13:01:08

标签: c++ boost windows-ce stlport

我在Windows CE开发项目中使用 Boost (1.54.0,bjam 2011.12.1.OS = NT)和 STLport (5.2.1)。我首先开始使用单个Windows CE平台SDK,但一切都很好。但现在我需要支持几个Windows CE平台SDK,每个SDK都有自己的系统头和编译标志。

首先,我为每个平台(比如PLATFORM1和PLATFORM2)构建STLport,然后将STLport库放到c:\lib\STLport-5.2.1\lib\PLATFORM1c:\lib\STLport-5.2.1\lib\PLATFORM2

然后,在user-config.jam我有:

using stlport : 5.2.1~PLATFORM1 : c:/lib/STLport-5.2.1/stlport : c:/lib/STLport-5.2.1/lib/PLATFORM1 ;
using stlport : 5.2.1~PLATFORM2 : c:/lib/STLport-5.2.1/stlport : c:/lib/STLport-5.2.1/lib/PLATFORM2 ;

然后,对于PLATFORM1,我通过运行带有stdlib=stlport-5.2.1~PLATFORM1标志的bjam.exe来构建Boost库,而为PLATFORM2构建则使用stdlib=stlport-5.2.1~PLATFORM2

但是bjam为PLATFORM2使用了错误的STLport库路径。例如,使用-n标志运行bjam会显示以下平台的链接命令(请注意第二次调用中的错误LIBPATH参数):

link.exe ... /out:"building\...\stdlib-stlport-5.2.1~PLATOFRM1\threading-multi\boost_xxx.dll" ... /LIBPATH:"c:\lib\STLport-5.2.1\lib\PLATFORM1"
link.exe ... /out:"building\...\stdlib-stlport-5.2.1~PLATOFRM2\threading-multi\boost_xxx.dll" ... /LIBPATH:"c:\lib\STLport-5.2.1\lib\PLATFORM1"

基本上,它始终使用user-config.jam中的第一个using stlport指令,无论我传递给stdlib参数的版本。 难道我做错了什么?设置环境能够使用不同的STLport二进制文件构建Boost的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

我通过使用特殊变量来定义STLport库位置来解决问题。 基本上,我是按照以下方式做到的。

user-config.jam我将所有STLport工具集初始化更改为单个:

  

使用stlport:5.2.1:c:/lib/STLport-5.2.1/stlport:   c:/lib/STLport-5.2.1/lib/ $(STLPORTLIBSUBDIR);

另外,为了查看变量,我在using指令之前的某处添加了以下行:

  

local STLPORTLIBSUBDIR = [modules.peek:STLPORTLIBSUBDIR];

然后,要为PLATFORM1构建Boost库,我需要传递bjam以下参数:

stdlib=stlport-5.2.1-sSTLPORTLIBSUBDIR=PLATFORM1