Hatena::Diary

Adukan このページをアンテナに追加 RSSフィード

2008-12-22

MacでBoost

今までWindows+CygwinBoostを使っていたのだけど、帰省するのでMac+terminalの環境でもBoostが使える様になりたいと思ったので設定。この手の設定は非常にめんどくさい。

ちなみにBoostとはC++の拡張ライブラリC++が苦手とする正規表現の文字列操作やコンテナをスマートにしてくれる補助ライブラリ。補助といってもどっかの誰かが適当に作ったライブラリでなくC++標準委員会という機関に対してそれなりの影響力をもってるというの。というのも委員の人の多くがBoostに携わってる人だかららしい。個人的には次のC++に付きそうな機能のテスト場所だと思ってる。

Macportのインストール

BoostMacで使いたいので早速インストール。まずはお手軽にBoostインストールするためにMacPortをインストール。Macportを使うと前回私がUbuntuでやったような感覚で必要なパッケージを簡単にインストールできる。

まず最初にファイルをhttp://www.macports.org/からダウンロードする。必要なファイルはhttp://www.macports.org/install.phpのページの上の方にリンクがあるので、OSのバージョンにあわせてインストール。ちなみにXcodeも必要になる。無い人はまずそれから入れて

でMacportのインストールが終わったらパスを張って行く、一々ターミナルにexport~と打ち込むのもめんどくさいので.bashrcに一気に全部書き込む。ちなみにMacportはインストールが終わったらターミナル(terminal.app)から使用できる。

export PATH=/opt/local/bin:/opt/local/sbin/:$PATH
export MANPATH=/opt/local/man:$MANPATH
export LIBRARY_PATH=/opt/local/lib:$LIBRARY_PATH
export LD_LIBRARY_PATH=/opt/local/lib:$LD_LIBRARY_PATH
export C_INCLUDE_PATH=/opt/local/include:$C_INCLUDE_PATH
export CPLUS_INCLUDE_PATH=/opt/local/include:$CPLUS_INCLUDE_PATH
export DYLD_FALLBACK_LIBRARY_PATH=/opt/local/lib
export BOOST_ROOT=/opt/local/include/boost:$BOOST_ROOT

書き込みが終わったらsource .bashrcで反映させる。あとはMacport自体を更新したいので

$ sudo port -d selfupdate
$ sudo port -d sync

以上。

Boostインストール

今回のお目当てはboostなので早速インストール

$ sudo port install jam
$ sudo port install boost

インストール。途中で作業が固まったりこけた場合は

$ sudo port clean --work boost

見たいな感じで一度cleanする。それでも復旧できない場合は/opt/local/var/_opt_~~みたいな感じの一時的な作業ディレクトリーを削除。以上。

適当にテストファイル

パスが通っていてかつちゃんと使える事を使える事を確認したいので適当にテストファイルを作成

#include <iostream>
#include <boost/cast.hpp>

int main(){
 return 0;
}

あとはg++通常通りコンパイル。パスが通ってない場合boost/cast.hppが見つからないとか出るのでパスを確認して行く。

で実際に使ってみるとこうなる。今回使うのはboost::regex正規表現を扱ってくれるもの。サンプル、内容、正規表現についてはこちらから拝借

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


int main(int argc, int *argv[]){
  boost::regex reg_exp;
  string str_reg;
  string str;
  string replace;
  string result;
  
  cout << "input Regular Expression ->";
  getline(cin, str_reg);
  reg_exp = str_reg;
  cout << "input Replace word ->";
  getline(cin, replace);
  
  while(true){
    cout << "input Result word ->";
    getline(cin, str);
    result = 
      boost::regex_replace(str, reg_exp, replace, boost::format_no_copy);
    cout << result << endl;
  }
  
  return 0;
    
}

ファイルを作成したらコンパイルコンパイルする際はライブラリ等をリンクしないと行けないので少し面倒だが-Iオプションでリンクする。今回はフルパスで指定

$g++ ファイル -I/opt/local/include/boost /opt/local/lib/libboost_regex-mt.a

で完成。当たり前だけどリンクしないとsymbolエラーになるので面倒だけど使うライブラリはリンクする。けど正直この程度ならRubyで書いた方が速いし楽しい。

参考にさせていただいたサイト

はこべにっき# MacPortsでステキなUNIXツールをインストール

えせSEの1日1Hack : MacPortが便利なので、まずは基本コマンドをまとめておく

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証