boost——入门指南

2 篇文章 0 订阅


什么是boost

boost库是一个开源免费的第三方库,它是一个非常优秀的库,是C++标准的最好实践之一,因此也经常被用于商业的开发。所以,如果你是搞C++的,还没有听过或用过boost,你就out了,想想自己是不是跟不上技术的步伐了,哈哈……

关于boost的地位,大家可以看看其官方文档:

We aim to establish "existing practice" and provide reference implementations so that Boost libraries are suitable for eventual standardization. Ten Boost libraries are included in the C++ Standards Committee's Library Technical Report (TR1) and in the new C++11 Standard. C++11 also includes several more Boost libraries in addition to those from TR1. More Boost libraries are proposed for standardization in C++17.

我们致力于建立(C++标准的)“现有实践”和参考实现,因此boost库都适合最终的标准。有10boost库已经被包含在C++标准委员会的库技术报告(TR1)和新的C++11标准中。除了从TR1获得的几个库外,C++标准还包含了几个额外boost库。更多的boost库将可能被用于C++17标准中。

 

boost库的使用

以下讲述的是windows平台下的使用,开发的IDEVS2010

boost库的下载

你可以到其官网http://www.boost.org上去查找最新版本的boost,进行下载。也可以到这个链接直接下载1.57.0的boosthttp://www.boost.org/users/history/version_1_57_0.html


boost的目录结构

boost_1_57_0\ ............................................Boost的根目录

   index.htm ..............................................www.boost.org中指导手册的一个副本

   boost\ .....................................................所有Boost的头文件

   lib\ ...........................................................预编译的二进制库

   libs\ .........................................................Tests, .cpps, docs, etc., by library

     index.html ........................................Boost库的使用手册的首页

     algorithm\

     any\

     array\

                     …更多的库…

   status\ ..................................................Boost-wide 测试包

   tools\ ....................................................常用工具,. Boost.Build, 快速查询手册, bcp

   more\ ...................................................法律条款等

   doc\ .......................................................Boost库文档的一个子集

 

在项目中引入boost

1.你只需要将下载的boost压缩包解压即可,不需要任何安装。假设你的boost库是解压在E:\C++Workspace\boost_1_57_0目录下。

2.VS2010下创建一个空的工程(我创建的是一个Win32 Console Application工程,假设工程名为BoostTest)

3.右键点击你的工程名,选择Properties(属性),在弹出的对话框中选择 Configuration Properties > C/C++ > General ,在 Additional Include Directories中输入第1步解压的boost的根目录路径(E:\C++Workspace\boost_1_57_0)

4.BoostTest.cpp中的内容替换成以下的测试代码:

#include "stdafx.h"

#include <boost/lambda/lambda.hpp>
#include <iostream>
#include <iterator>
#include <algorithm>

int main()
{
	using namespace boost::lambda;
	typedef std::istream_iterator<int> in;

	std::for_each(
		in(std::cin), in(), std::cout << (_1 * 3) << " " );
}


 

4.编译你的工程BoostTest,编译成功后运行(F5)。在弹出的控制台对话框中输入2 4 6后按Enter,将输出6 8 12的结果,说明测试成功,boost可以正常使用了。按Ctrl+C结束输入。

编译二进制的boost

如果你想要使用任何单独编译的 Boost 库,你需要获得二进制的库文件。用Visual C++从源代码中编译二进制库的过程如下:

打开VS2010的命令提示符控制台:Windows开始菜单\Microsoft Visual Studio 2010\Visual Studio Tools\Visual Studio 2005 Command Prompt,用cd命令将当前目录定位到Boost的根目录(E:\C++Workspace\boost_1_57_0),输入如下两个命令:

编译命令一:

bootstrap

.\b2

 

第一个命令(bootstrap)会执行bootstrap.bat脚本,是用于准备需要使用的Boost.Build程序;第二个命令(.\b2)是调用Boost.Build程序构建独立编译的Boost库。

 

输入第一个命令(bootstrap)后需要等待一小段时间,当出现以下提示时,说明命令执行完毕。

 

这时Boost根目录会多出四个文件:

b2.exe:           Boost.Build程序,用于编译二进制的Boost

bjam.exe :        Boost.Build程序,用于编译二进制的Boost

bootstrap.log :    执行以上两个命令时记录的日志

project-config.jam: Boost.Build的配制参数

b2.exe bjam.exe 这两个exe作用是一样的,bjam.exe 是老版本,b2bjam的升级版本。

 

输入第二个命令(.\b2)后进行编译,整个编译的过程会非常长,可能需要一个小时左右,请耐心等待。编译成功后会有如下提示:

 

这时你的Boost根目录下会多出个lib文件夹(笔者的是在.\stage\lib,可能每一台电脑或平台下不一样,请以命令行最后的提示为准,如上图),这就是编译出来的Boost的静态库和动态库。

 

编译命令二:

bootstrap

b2 --build-dir=.\lib toolset=msvc-10.0 --build-type=complete stage

 

我用编译命令一编译后,进行链接测试时,报以下错误:

error LNK2038: mismatch detected for '_MSC_VER': value '1800' doesn't match value '1600' in BoostTest.obj

error LNK2038: mismatch detected for '_MSC_VER': value '1800' doesn't match value '1600' in BoostTest.obj

error LNK2038: mismatch detected for '_MSC_VER': value '1800' doesn't match value '1600' in BoostTest.obj

error LNK2038: mismatch detected for '_MSC_VER': value '1800' doesn't match value '1600' in BoostTest.obj

error LNK2038: mismatch detected for '_MSC_VER': value '1800' doesn't match value '1600' in BoostTest.obj

error LNK2038: mismatch detected for '_MSC_VER': value '1800' doesn't match value '1600' in BoostTest.obj

error LNK1104: cannot open file 'libboost_regex-vc100-mt-gd-1_57.lib'

 

但我在\stage\lib目录下只找到相应的libboost_regex-vc120-mt-1_57.liblibboost_regex-vc120-mt-gd-1_57.lib

上网查了资料说是编译出来的Boost库是VC++11的,需要在VS2012上才能支持,VS2010不支持。因此需要重新设置选项,指定编译器的版本。

上面的命令,第一个命令(bootstrap)编译命令一中含意相同,第二个命令b2 --build-dir=.\lib toolset=msvc-10.0 --build-type=complete stage的含意如下:

--build-dir                 编译Boost库时的工作目录,用于存放中间文件

toolset=msvc-10.0           toolsetC++编译器的集合,msvc-10.0表示微软VC++10.0编译器,VS2010支持。

--build-type=complete stage    “--build-type=complete” 导致Boost.Build 会编译出所有支持类型的Boost

 

 

 

验证Boost

为了验证上面编译出来的静态库,我们可以用以下一个简单的“主题提取”的程序来进行测试。

 

1.在“在项目中引入boost”中已经创建了一个BoostTest工程,右键点击你的工程名,选择Properties(属性),在弹出的对话框中选择 Configuration Properties > Linker > General ,在 Additional Library Directories中输入上面编译出来静态库的路径(E:\C++Workspace\boost_1_57_0\stage\lib)

2.将BoostTest.cpp中的内容替换成以下代码

#include "stdafx.h"

#include <boost/regex.hpp>
#include <iostream>
#include <string>

int main()
{
	std::string line;
	boost::regex pat( "^Subject: (Re: |Aw: )*(.*)" );

	while (std::cin)
	{
		std::getline(std::cin, line);
		boost::smatch matches;
		if (boost::regex_match(line, matches, pat))
			std::cout << matches[2] << std::endl;
	}
}
 

3.Build你的工程

4.在你工程编译出的Debug目录下会有一个可执行程序BoostTest.exe,在该目录下创建一个subject.txt文件,并将以下内容保存至subject.txt文件中。

To: George Shmidlap

From: Rita Marlowe

Subject: Will Success Spoil Rock Hunter?

---

See subject.

 

5.打开命令提示符,将当前目录定位到Debug目录下(E:\C++Workspace\VS2010\BoostTest\

Debug),输入:BoostTest.exe < subject.txt。将会获取该文本的主题Will Success Spoil Rock Hunter?如果出现如下结果,说明验证成功。

 

 

可参考阅读:

http://www.boost.org/doc/libs/1_57_0/more/getting_started/windows.html#get-boost

http://www.cnblogs.com/zhcncn/p/3950477.html

 

 

如果您有什么疑惑和想法,请在评论处给予反馈,您的反馈就是最好的测评师!由于本人技术和能力有限,如果本博文有错误或不足之处,敬请谅解并给出您宝贵的建议!

 

 

 

### 回答1: 《CMake——入门到精通》是一本介绍CMake的书籍。CMake是一个跨平台的开源构建工具,它可以用于自动化构建、测试和部署应用程序、和模块。 这本书从CMake的基本概念和用法入手,逐步深入介绍了CMake的各种功能和高级用法。首先,书中介绍了CMake的安装和配置,以及CMake项目的基本结构。然后,书中详细讲解了如何编写CMakeLists.txt文件来描述项目的构建过程,包括如何定义源文件、头文件和链接,如何设置编译选项和链接选项,以及如何生成不同平台和编译器下的构建配置。 在介绍完CMake的基本使用后,书中着重讲解了CMake的高级功能和技巧。比如,如何使用CMake进行跨平台开发,如何进行自定义构建规则,如何配置项目的安装和打包,以及如何对大型项目进行模块化管理等等。同时,书中还提供了大量的示例代码和实用技巧,帮助读者更好地理解和应用CMake。 总的来说,《CMake——入门到精通》是一本系统而全面的CMake教程,适合想要学习和掌握CMake的开发人员阅读。无论是初学者还是有一定经验的开发者,都可以从这本书中获取到实用的知识和经验,提高项目构建的效率和质量。无论是在学习中还是在实际工作中,这本书都可以成为CMake的权威参考指南。 ### 回答2: 《cmake——入门到精通.pdf》是一本关于CMake的书籍。CMake是一个跨平台的开源构建工具,用于管理软件项目的构建过程。本书旨在帮助读者从入门到精通掌握CMake的使用。 这本书首先介绍了CMake的基本概念和原理,包括如何编写CMakeLists.txt文件以及如何配置和生成项目的构建系统。然后,书中详细介绍了CMake的常用功能和命令,包括设置编译选项、指定源文件、添加和链接等。此外,本书还深入讲解了CMake的高级用法,如多目录项目管理、条件编译、自定义函数和宏等。 除了基本功能和用法,本书还涵盖了CMake与其他工具和框架的集成,如与Qt、OpenGL和Boost等。读者可以学习如何使用CMake来管理复杂项目和的构建过程。 《cmake——入门到精通.pdf》也提供了大量的示例和实战项目,帮助读者更好地理解和应用CMake。通过阅读本书,读者将能够全面了解CMake的工作原理和常用技巧,掌握使用CMake构建和管理项目的能力。 总之,借助《cmake——入门到精通.pdf》,读者可以系统地学习和掌握CMake的基本概念和高级用法,并能够灵活应用CMake来管理复杂项目的构建过程。这本书对于软件开发者和项目管理者来说,是一本非常实用和有价值的参考书。 ### 回答3: 《CMake入门到精通.pdf》是一本介绍CMake工具的书籍。CMake是一个跨平台的开源构建工具,可以用于管理和自动化C++项目的构建过程。该书以系统的方式介绍了CMake的基本概念、语法和用法。 首先,书中详细解释了CMake的背景和作用。CMake的主要功能是生成与平台无关的构建脚本,在不同的操作系统和编译器上都可以使用。它可以通过简单的配置文件来管理项目的依赖关系和编译选项。 其次,书中介绍了CMake的基本语法和常用命令。CMake使用一种类似于脚本的语言来描述项目的构建过程,通过编写CMakeLists.txt文件来配置项目。书中示例详细展示了如何编写CMakeLists.txt文件,包括设置项目名称、指定源文件、添加和链接等等。 然后,书中深入讲解了CMake的高级用法和技巧。CMake提供了丰富的功能来处理复杂的项目结构和构建需求,例如条件判断、循环、宏定义等。书中通过实际案例演示了这些高级特性的使用方法,帮助读者更好地理解和运用CMake。 最后,书中还介绍了CMake与其他开发工具的集成,如CTest、CPack和CDash等。CTest用于自动化测试,CPack用于生成安装包,CDash用于持续集成。书中展示了如何使用这些工具来进一步提高项目的开发效率和质量。 总之,《CMake入门到精通.pdf》通过全面而系统的方式介绍了CMake工具的使用方法,适合初学者和有一定经验的开发者阅读。读者可以通过学习这本书,掌握CMake的基本概念和语法,了解CMake在实际项目中的应用,提高项目的构建效率和可维护性。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陌尘(MoChen)

爱打赏的人技术成长更开哦~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值