之前没有用过jam,白天在公司上网找了许多资料,在VC2003下成功编译了,满以为2005下不会太难吧,结果忙了我一晚上。现在想来,还是动脑筋太少了。现在把编译过程写下来,以记载这呕心呖血的一晚上,然后我也可以瞑目去睡觉了。
首先是编译jam,在< boost-path >\tools\build\v1下,把vc7.1-tools.jam文件复制一份,改名为vc80-tools.jam,我暂时未测试stl-port。
修改文件内容里的路径,这个不细说了,根据你的安装路径来改。几个flag行就去掉吧,去了以后编译时就少一些warning了。我的文件修改以后内容如下:
extends-toolset msvc ;
# singleton variables...
set-as-singleton VC80_ROOT ;
if ! $(MSVCDir)
{
??? ProgramFiles ?= $(PROGRAMFILES) ;
??? VC80_ROOT ?= $(ProgramFiles:J=" ")"\Microsoft Visual Studio 8\\VC" ;
??? VC_TOOL_PATH = "$(VC80_ROOT)"\bin\ ;
??? VC_SETUP = "CALL \"$(VC_TOOL_PATH)VCVARS32.BAT\" >nul" ;
}
VC_PDB_NAME = vc80 ;
然后在< boost-path >\tools\build\jam-src目录下运行:
build -sTOOLS=vc80
编译会通过的,最后链接时会报错,我到天亮时才想了个蠢办法,表笑我:
.\bootstrap.vc7\jam0 -f build.jam --toolset=vc7 "--toolset-root=C:\Program Files\Microsoft Visual Studio 8\VC"
好了,bjam编译完成。下面编译boost,有2个文件需要改一下:
< boost-path >\boost\config\auto_link.hpp在第118行附近改为:
#elif defined(BOOST_MSVC) && (BOOST_MSVC == 1310)
?? // vc71:
#? define BOOST_LIB_TOOLSET "vc71"
#elif defined(BOOST_MSVC) && (BOOST_MSVC >= 1400)
?? // vc71:
#? define BOOST_LIB_TOOLSET "vc80"
< boost-path >\boost\config\compile\visualc.hpp最后面的>1310改为1400,如下:
#if (_MSC_VER > 1400)
OK了,现在到下,运行如下命令:
tools\build\jam_src\bin.ntx86\bjam -sTOOLS=vc80 "-sBUILD=debug release static/dynamic"
编译完成以后,设置VC2005的include和lib路径,最好搜索一下*.lib,拷到一个文件夹下,现在就可以测试了。
写了一段测试正则表达式的代码,编译、链接,居然报错!原来是要链接多线程版本!在VC2005里找了一下,发现只有多线程选项,单线程竟然没有列进来,真是气死我了。
这中间我走了一点弯路,试图编译一个多线程版本的boost,结果发现不行,编译出来还是单线程的,就线程库是多线程版本。
没办法,再用个蠢办法:在#include < stdafx.h >后面加上一句:#undef _MT,搞定!终于运行起来了,睡觉去。