- 导读
C++11新语言特性:
nullptr:强类型的空指针,代替NULL宏
auto/decltype:自动推到表达式类型,不必手写变量的类型
for:基于范围的新式循环,形式更加“优雅”
lambda表达式:又称闭包(closure),能够非常便捷的定义函数对象,通常的形式为【】(…){…},其中[]是补货列表,()是函数参数,{}势函数体。 - gitHub 源码 https://github.com/chronolaw/boost_guide.git
1.绪论
Boost是一个功能强大,构造精巧,跨平台,开源并且完全免费的C++程序库。
Boost库安装:
- 从Boost官网下载最新版本。boost_1_72_0.tar.gz
tar boost_1_72_0.tar.gz
- 在解压后的目录下运行 ./booststrap.sh ; ./b2 install
- 生成的头文件在use/loacl/include 库文件在/use/local/lib
- 可以只用buildtype选项指定编译类型 ./b2 --buildtype=complete install。可以安装所有调试版,发行版的静态库和动态库。
1.1定制安装
-
./b2 --show-libraries //查看所有编译后才能使用的库
-
./b2 --with-date_time --buildtype=complete install 使用–with或–without选项打开或关闭某个库的编译。
-
./b2 link-static install //编译安装所有静态链接库
此外,还可以指定安装路径,指定debug或release版扥,可以使用–help选项或参考Boost文档已获得更多的消息。
2 编译验证 -
头文件<boost/version.hpp>里面有两个宏,定义了当前Boost程序库的版本号。
#define BOOST_VERSION 107200
#define BOOST_LIB_VERSION “1_72” -
头文件<boost/config.hhp>里面的三个宏:BOOST_PLATFORM,BOOST_COMPILER,BOOST_STDLIB,分别定义了当前操作系统,编译器和标准库。
#include <iostream>
using namespace std;
#include <boost/version.hpp>
#include <boost/config.hpp>
int main()
{
cout<<__cplusplus<<endl;
cout<<BOOST_VERSION<<endl;
cout<<BOOST_LIB_VERSION<<endl;
cout<<BOOST_PLATFORM<<endl;
cout<<BOOST_COMPILER<<endl;
cout<<BOOST_STDLIB<<endl;
return 0;
}
运行
g++ -o a.out version.cpp -I
编译程序。
3.构建工具
3.1 安装b2
安装b2-boost build v2。[b2是专门为构建Boost这样的复杂度的软件开发的构建工具]
在Boost解压缩后的根目录下执行以下命令
cd tools/build
./booststrap.sh
./b2 install
b2会默认安装到/usr/local/bin目录下
3.2 构建脚本
和make等构建工具一样,b2也能使用文本格式的构建脚本来管理代码,其名称通常是“jamfile”或“Jamfile”。此外b2还有一个特殊的“jamroot”文件,需要放在整个项目的根目录下,用于管理项目树,定义整个项目的构建设置。
jamroot一般用于定义整个项目里通用的编译参数,包含路径等设置,避免每个子目录里的jamfile重复定义。常见的格式如下
import testing ;
using gcc : : g++ #使用g++
: <cxxflags>-std=c++11 #指定使用C++11标准,也可使用用C++14标准
<cxxflags>-fPIC
<cxxflags>-Wno-multichar #for boost::mpl
;
path-constant DEV_ROOT : . ;
project : requirements #设置整个项目的选项
<threading>multi #多线程
<link>static #静态变量
<include>./common/ #相当于 -I
;
use-project /lib : lib ; #指定lib项目的别名
3.3 构建语言
b2使用的构建语言陈伟bjam,是一种解释性语言,拥有完整的语法定义,包括变量,分支,循环语句,函数,甚至还包括类。
- 构建目标程序e,使用源码xxx.cpp,yyy.cpp和库zzz,
exe e : xxx.cpp yyy.cpp zzz;
- 构建目标t,并且在编译后自动运行,通常用于单元测试:
unit-test t : xxx.cpp
- 定义链接库zzz,它依赖depend_libs:
lib zzz : depend_lists
bjam是居于token语言,使用空格,tab等空白字符来区分语法元素,不仅是单词,即使是“:”“;”,这样的标点符号前后也必须要有空格,否则bjam将无法识别标点。