2011年2月21日月曜日

【C++】eclipse3.6 CDT(pleiades)+boost1.45

最近は仕事でもっぱらC++やってます。んでその職場はネットに繋げないので、ちょっと調べようと思ってもできないんですよねぇ。。。

だから自宅で環境作って試そうとおもったとです。じゃあ環境はどれにしようかと悩んだのですが、VCは既にあるしつまんないから、gccでやってみたので、備忘録。

つっても、C++の環境作るのはあっと言う間なんですよねぇ。

  1. 手っ取り早くpleiadesの最新(eclipse3.6 CDT)をDLすれば終了。
  2. これだけじゃつまらないからBoost1.45の最新を入れました。
  3. ついでに、pleiades付属のMinGWのアップデート


MinGWのアップデート

  1. Automated MinGW Installerから最新版のmingw-get-0.1-mingw32-alpha-5.1-bin.zipをDLし、展開後にできたフォルダを全て「c:\pleiades-e3.6-cpp-jre_20101025\mingw」に全て上書き
  2. 後は下記コマンドを叩いてアップデート

cd /d "c:\pleiades-e3.6-cpp-jre_20101025\mingw\bin"

mingw-get update

rem gccを更新
mingw-get install mingw32-gcc
これで終了、あとはboost。

boostはそのままでも使えるヘッダーはあるらしいのですが、本格的に使おうと思ったら、ビルドしないといけないらしい・・・。ネットで探したけど、情報がかなり古いので自力でインスト。

boostのビルド

  1. 適当な場所でDLしたzipを展開。私はeclipseと同じフォルダに置きました。(ここではc:\pleiades-e3.6-cpp-jre_20101025配下)


  2. 展開したフォルダの中にあるbootstrap.batを叩くと、同フォルダにbjam.exeができるので、これをDOSで実行していく

cd /d "c:\pleiades-e3.6-cpp-jre_20101025\boost_1_45_0"

setlocal

rem これはいらないかも、公式で書いてるから一応
set BOOST_ROOT="c:\pleiades-e3.6-cpp-jre_20101025\boost_1_45_0"

set path=%path%;"c:\pleiades-e3.6-cpp-jre_20101025\boost_1_45_0\bin";

bjam --toolset=gcc

endlocal

上記をバッチにして叩いて、ひたすら待ちましょう・・・・

※1回目に、toolsetのパラメータを書かずにやったら、勝手にVC8用のライブラリーを作られて萎えた・・・。なので必ず指定しましょう。

私の環境Let's Note CF-R7(core 2 duo cpu U7600 1.2GHz)では3時間かかりました(;´Д`)


因みにライブラリーができるパスはデフォルトでは

「.\boost_1_45_0\stage\lib」です


コンパイルが完了したらeclipseのプロジェクトの参照を設定する

  1. プロジェクト→「プロパテ」→「C/C++ ビルド」→「設定」→「GCC C++ Compiler」→「インクルード」→「インクルード・パス(-I)」→「+」→「”c:\pleiades-e3.6-cpp-jre_20101025\boost_1_45_0"」


  2. 同「MinGW C++ Linker」→「ライブラリー」→「ライブラリー検索パス(-L)」→「+」→「”c:\pleiades-e3.6-cpp-jre_20101025\boost_1_45_0\stage\lib"」


試しにどっかから拾ってきたコードを実行

//============================================================================
// Name : test.cpp
// Author : test
// Version :
// Copyright : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================

#include <iostream>
#include <string>
#include <boost/tokenizer.hpp>
using namespace std;

int main( void )
{
typedef boost::escaped_list_separator<char> TokenSep;
typedef boost::tokenizer< TokenSep > Tokenizer;

string s = "orange,apple,banana,表ddd,\"Guava Juice\"";
TokenSep sep( 0,',','\"' );
Tokenizer tok( s, sep );

for( Tokenizer::iterator beg=tok.begin(); beg!=tok.end();++beg){
cout << '[' << *beg << ']' << "\n";
}
}

これで使えるようになると思います。ただコンパイルの時にいくつかエラーがでてスキップされているのがありましたが、仕事が忙しいので調べてまへん。。。

0 件のコメント: