最近开始学习boost c++ library,并且打算用业余的时间长期坚持下去。再一个就是通过学习boost库练习在linux下面进行c++编程。今天记录一下boost的入门吧。
首先,入门最好的材料就是boost官方网站上面的文档,在什么平台上,怎么开始都说的很清楚,而且很有条理,过程清晰。
boost的库的压缩包直接可以从boost的官网上下载得到,下载后直接用unzip命令解压到/usr/local/目录下面,由于/usr/local目录已经被添加在PATH环境变量里面,所以在使用boost的不许要单独编译的模块时,直接可以通过#include <boost/xxx/xxx.hpp>即可引入,下面的helloworld实例即是如此。有部分模块需要单独编译,在Getting started教程中也有介绍。
hello world boost lib
首先接触的当然是hello world程序:#include <boost/lambda/lambda.hpp>
#include <iostream>
#include <iterator>
#include <algorithm>
using namespace std;
int main()
{
using namespace boost::lambda;
typedef std::istream_iterator<int> in;
std::for_each(
in(std::cin), in(), std::cout << (_1*3) << " ");
std::cout<<std::endl;
return 0;
}
g++ -I /usr/local/boost_1_50_0/ /home/liuxin/workspace/develop/boost/helloworld/hello.cpp -o hello
工欲善其事,必先利其器
学完hello world,感觉用VIM写C++比较吃力的地方就是自动补全和提示功能不好搞,于是研究了下VIM的自动补全配置方法。主要就是OminCppComplete插件,ctag两个工具,然后配置自己主目录下面的.vimrc文件。具体.vimrc文件的详细高级配置参见 http://www.cnblogs.com/ma6174/archive/2011/12/10/2283393.html,C++代码补全功能的详细教程在VIM的官网的wiki页面里有详细步骤,详见 http://vim.wikia.com/wiki/C++_code_completion。总的来说,具体步骤如下:
1、先配置好.vimrc的基本代码编辑辅助功能,例如代码高亮,缩进等等,如果觉得麻烦可以直接找一个强大配置直接拷贝至.vimrc文件当中。
2、下载安装ctag工具
3、按照VIM官网的配置方法配置OminCppComplete插件
其中在配置boost库的自动补全会遇到一个很棘手的问题就是:ctag根据boost库的头文件生成的ctag文件有1G多大,在VIM编辑器补全时会很慢,根本无法继续编程。其主要原因是有些模块的ctag文件太大了,最好是能够单独生成ctag文件然后将其配置到.vimrc文件中。比如说typeof文件夹下面生成的ctag文件大小就有1G,只能放弃这个文件夹,还有fusion,phonix等文件夹生成的ctag文件都很大,上百兆。因此我写了一个配置.vimrc中boost补全的配置shell脚本,根据boost库下面的文件夹情况,自动调用ctag命令生成tag文件,并配置到.vimrc中。代码如下:
#########################################################################
# File Name: boost-ctags-generator.sh
# Author: Liu Xin
# mail: liu_x_0625@126.com
# Created Time: 2012年07月22日 星期日 20时31分35秒
#########################################################################
#!/bin/bash
boost_path=/usr/local/boost_1_50_0/boost/;
for name in `ls $boost_path`
do
#echo $name;
if [ -d "$boost_path""$name" ] && [ $name != "typeof" ] ;
then
#echo $name;
sub_path="$boost_path""$name";
ctag_file="~/.vim/tags/""$name";
echo $ctag_file;
echo $sub_path;
cd ~/.vim/tags;
if [ ! -x $ctag_file ];
then
ctags -R --sort=1 --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ -f "$name" "$sub_path";
fi
vimrc=`cat ~/.vimrc`;
#echo $vimrc;
echo "\n""set tags+=""$ctag_file" >> ~/.vimrc;
#return;
fi
done