不用BJAM编译心得(1)
上次把BOOST包下载下来了,1.3.0的,总共大概是5M多大小吧(压缩后大小)。
看了文档,才知道要用个什么BJAM来编译,而且那东西我编译后一看还是DOS命令行参数的,
像我这种被WIN宠坏的人不是很习惯的(虽然我在DOS时代DIR,FDISK的隐含参数都记得,UNIX的SHELL也记得好多呀)
也许高手都喜欢用命令行吧,或者说都用的是UNIX吧,第一反应就是将JAM原代码打开,想把这玩意儿改成
窗口模式的,后来慢慢发现要花去很多时间(那个JAM原代码基本是纯C写成的,所以用LCC就可以编译了)
而且有这个时间的话,我还不如去睡觉养精神呢。
反正都是原代码,我怕什么,下午正好有空,来拿这些东西开刀吧。
想要哪个库就直接编译哪个库好了。
BOOST这套库适应性很强(或者说能在很多操作系统和很多编译器下使用吧,因此肯定会有一些开关之类的文件
来对每个系统来进行配置,这就是boost\boost\config.hpp.
============================================================================
附:
我的目录结构
c:\boost
---boost 放头文件的(所有内容从boost\boost拷入)
---lib 放生成后的库文件的
---src 放原文件
---DLL 放生成的DLL文件
---DLIB 放生成的debug lib
其他文件呢?被我删掉了或者移到其他地方了,因为我不会用到的
(VC++7.1已经比其他大部分编译器要好了,不知道是不是最好)。
你要是高兴的话,可以将boost目录直接放到你的系统的include目录下面去,就省得改头文件目录了。
不过我不太习惯。
===========================================================================
下面是我的以c:\boost\boost\config.hpp的内容
#pragma once
#include <boost/config/visualc.hpp>(编译器选项,这个文件其实很不错,
还有那个complier目录下的其他文件,就是说每个编译器
都有一个这样的文件,
能很明显的看出哪个编译器不支持哪个特性,
哪个编译器有什么已知的BUG)
gcc.hpp
borland.hpp
上面这两个就不用说了吧。
#include <boost/config/dinkumware.hpp>(标准库选项,NET2003的std版本就是这个Dinkumware standard lib
也就是有名的P.J.Plauger所搞的那一套了,
我现在用的版本号是_CPPLIB_VER=313(定义在文件yvals.h中)
当然假如你想要用STLPORT和BOOST合用的话,你有可能就要选用
stlport.hpp这个头文件了。
roguewave.hpp这个好像就是bcb里面的吧
libstdcpp3.hpp这个应该是对应g++3的吧
#include <boost/config/win32.hpp> (平台选项)
大概支持LINUX,UNIX,BSD,MACOS,WIN32等等,我等懒人
就用WIN32吧。LINUX就让他去做服务器好了。
#include <boost/config/suffix.hpp>
我把上面三个文件都移到了boost/config下面了,并且删除该目录下面的所有子目录。
因为我基本上不会使用其他的操作系统或者编译器了,即使想用的话,到时候再从压缩包里面解出来就可以了。
注:
*事实上我感觉到VC7.1里面的minmax可能已经不存在BUG了,不过好像BOOST还是认为不行,还是自己重实现了。
*我的配置:
2000 professional sp3 810mainboard, 900C,128SDR
vc++13.10.3077(NET2003)
在头文件目录上加上c:\boost\boost
在库文件目录加上c:\boost\lib
就这样可以开始了吗?
建一个大的解决方案,肯定叫boost啦
一、测试thread库(好像用的人很多吧)
建一项目,就叫thread吧(lib输出的),
在c:\boost\src下面建thread目录,我准备所有的库都这样做,在SRC下面建对应的目录。
将所有的压缩包中boost\libs\thread\src里面的CPP文件拷至c:\boost\src\thread中
再将这些文件加到VC++项目中的原文件里面。
再将所有的boost\boost\thread\里面所有的*.hpp至头文件中,
项目属性中改链接库为_MT(多线程)
将boost\thread\detail\config.hpp中的BOOST_THREAD_DECL设为无了。
*这套类库里面很多都有各种选项,比如说输出DLL还是直接引用或者是LIB输出了
上面一个选项就是用在这个地方的,其实我认为就相当于一个DLL开关,这种技巧也是DLL的一种常用技巧了。
输出路径为c:\boost\lib和c:\boost\dlib
然后开始编译了,
测试成功后,又找了BOOST自带的EXAMPLE(注意加上刚才编译成功的链接库,不然直接用加一行什么lib之类的也可以)
,完全成功(测试时要注意DEBUG和RELEASE中的多线程链接库也不一样,要分开设置两个多线程库才行,
不然会说又什么东西找不到链接符号啦,或者有时还会说什么东西重复定义,基本上都是因为这个问题的)