作者:waiting4you
1. 准备工作:
boost 1.34.1,写这篇文章时它的最新版本
boost-build 2.0-m12,写这篇文章时它的最新版本(其实这个boost里已经带了,不过我总是喜欢用最新版的:-P)
bcbboost-1_34_1-5_9_2-0.2, 写这篇文章时它的最新版本
2.设置编译参数
在控制台下执行
bcc32看看是什么BCB的版本先,我装了SP3及12月更新版后是
CodeGear C++ 5.93
解压
boost 1.34.1, 比如解压在
d:/boost_1_34_1
解压
bcbboost-1_34_1-5_9_2-0.2,并覆盖到
d:/boost_1_34_1里的同名文件夹下。注意,这个压缩包里的目录结构是: /
bcbboost/boost/boost, /
bcbboost/boost/libs, /
bcbboost/boost/tools,应该是把
/bcbboost/boost/下的
boost、
libs和
tools目录解压覆盖到d
:/boost_1_34_1里。
如果你的BCB版本和我一样是
5.93版,得改个东西:
打开
d:/boost_1_34_1/
boost/config/compiler/borland.hpp,找到所有的0x592改成0x593(这个”所有的”其实只有两个地方,第23行和第110行)
解压
boost-build 2.0-m12, 比如解压在
d:/boost-build
用
d:/boost_1_34_1/tools/build/v2里的
user-config.jam替换
d:/boost-build下的(这个文件是
bcbboost里解压出来的,所以请按顺序做)。用记事本打开,找到
#using borland : 5.9.2 :…这行,去掉前面的
#号,改成
正确的版本号并把后面的
路径改成你的BCB2007的安装路径,它用的是
反斜杆。我的是这样子的:
using borland : 5.9.3 : "E:/PROGRA~1/CodeGear/RADSTU~1/5.0/bin/bcc32" : <cxxflags>-ID:/src/spirit/boost ;
强烈建议使用
短路径名,尤其是针对有空格的路径名(象/program files/...这种)
进入
d:/boost-build/jam_src,打开编辑
build.bat。 找到
:Start这行(应该是在
186行),把原来的:
:Start
set BOOST_JAM_TOOLSET=
set BOOST_JAM_ARGS=
REM If no arguments guess the toolset;
…
改成:
:Start
set BOOST_JAM_TOOLSET=borland
set BOOST_JAM_TOOLSET_ROOT="E:/PROGRA~1/CodeGear/RADSTU~1/5.0/bin"
(注意是短路径名)
set BOOST_JAM_ARGS=
goto Setup_Toolset
REM If no arguments guess the toolset;
…
3. 编译bjam
运行上一步修改过的
build.bat, 大约10几秒钟后在它的下一级文件夹
bin.ntx86里就有了一个
bjam.exe
4. 编译boost
复制这个
bjam.exe到
d:/boost_1_34_1下,在控制台模式下进入此文件夹,输入
bjam --build-dir=d:/bb --toolset=borland stage
现在如果没出什么错误的话大家就可以出去打打球,逛逛街,泡泡MM什么的,反正时间很长,我是在晚上编译的,也没去算时间,呵呵
编译完成后
d:/bb目录下是一大堆编译过程文件,可以删除的。我们需要的lib和dll文件都安静地躺在
d:/boost_1_34_1/stage/lib里呢。
5. 测试
新建控制台程序,工程属性里添加
d:/boost_1_34_1到Include路径,添加
d:/boost_1_34_1/stage/lib到library路径,代码:
#include
<
iostream
>
#include < string >
#include < boost / regex.hpp >
using namespace std;
using namespace boost;
int main( int argc, char * argv[])
... {
try...{
string src_str("Sat Jan 12 11:07:08 2008");
string regexstr("(.*) (.*) (.*) (.*) (.*)");
string rep_str("$5-$2-$3 $4 $1");
string results;
results=regex_replace(src_str,regex(regexstr),rep_str);
cout << results << endl;
}
catch(runtime_error &e)
...{
cout << e.what() << endl;
}
system("pause");
}
#include < string >
#include < boost / regex.hpp >
using namespace std;
using namespace boost;
int main( int argc, char * argv[])
... {
try...{
string src_str("Sat Jan 12 11:07:08 2008");
string regexstr("(.*) (.*) (.*) (.*) (.*)");
string rep_str("$5-$2-$3 $4 $1");
string results;
results=regex_replace(src_str,regex(regexstr),rep_str);
cout << results << endl;
}
catch(runtime_error &e)
...{
cout << e.what() << endl;
}
system("pause");
}