boostを入れてみる

インストール

Boost C++ LibrariesのDownloadリンクから、boostのソースをダウンロード(boost_1_37_0.tar)。configureを実行してコンパイル。結構時間がかかる。。。

tar xfv boost_1_37_0.tar
cd bost_1_37_0
./configure
make
sudo make install

環境設定

コンパイルしようと思ったら、怒られました。というわけで、.zshrcに以下を記述

export C_INCLUDE_PATH=/usr/local/include
export CPLUS_INCLUDE_PATH=/usr/local/include/boost-1_37

コンパイルのオプションに付けるとかでもいいらしいけど、面倒なので上のやついいか。

g++ -I/usr/local/include/boost-1_37 hoge.cpp 

flymake

zshから叩く時は上の設定でよかったんだけど、flymakeがなんかうまくいかない。エラーないのにエラーとか言ってくる。と思っら、emacsの環境のほうもセッティングしてやらないといけないようだ。

(setenv "CPLUS_INCLUDE_PATH" "/usr/local/include/boost-1_37")

これでいいのか全然分からないけど、動いたのでこれでよし。flymakeの設定は以下を放りこんでおくとか。

(require 'flymake)

(defun flymake-cc-init ()
  (let* ((temp-file   (flymake-init-create-temp-buffer-copy
                       'flymake-create-temp-inplace))
         (local-file  (file-relative-name
                       temp-file
                       (file-name-directory buffer-file-name))))
    (list "g++" (list "-Wall" "-Wextra" "-fsyntax-only" local-file))))

(push '("\\.cpp$" flymake-cc-init) flymake-allowed-file-name-masks)

(add-hook 'c++-mode-hook
          '(lambda ()
             (flymake-mode t)))

適当なサンプルコード

全然C++知らないんだけど、とりあえずなんか書いてみる。

#include <iostream>
#include <boost/numeric/ublas/vector.hpp>
#include <boost/numeric/ublas/matrix.hpp>
#include <boost/numeric/ublas/io.hpp>

int main()
{
  using namespace boost::numeric::ublas;
  vector<int> v( 3 );
  for( int i=0; i!=3; ++i )
    v( i ) = i+1;
  matrix<int> a( 3, 3 );
  for( int i=0; i!=3; ++i )
    for( int j=0; j!=3; ++j )
      a( i, j ) = (i+1)*(j+1);
  std::cout << prod(a,v) << std::endl;
  return 0;
}

ん、C++って空白4つだっけか?Rubyなれしすぎている。。。