boost.pythonをcmakeでコンパイルする方法
boost.pythonをcmakeでコンパイルする方法です. ubuntu7.10,centos5で動作を確認しています.
- cmake はunix windos両方で動くクロスプラットフォームなmakeです.
- boost.python cmake をインストールしてください. ubuntuの場合は apt-get install cmake boost* でインストールされます
例として以下のコード boopy.cpp をcmakeでコンパイルする方法を示します.
#include <boost/python.hpp> #include <boost/python/numeric.hpp> using namespace boost::python; char const* say_yes(){return "YES!!";} // See if we can invoke array() from C++ object new_array() { return numeric::array(make_tuple( make_tuple(1,2.2,3) , make_tuple(4,5,6) , make_tuple(7,8,9) ),'d'); } // test argument conversion void take_array(numeric::array x){x[make_tuple(0,0)]= 0.5;} BOOST_PYTHON_MODULE(libboopy) { def("yes", say_yes); def("new_array", new_array); def("take_array", take_array); }
- boopy.cppと同じディレクトリにCMakeLists.txtというファイル名の以下のテキストファイルを作る
INCLUDE_DIRECTORIES( /usr/include/python2.4 ) ADD_LIBRARY(boopy SHARED boopy.cpp ) TARGET_LINK_LIBRARIES(boopy boost_python python2.4 )
- 以下でコンパイルします
- windowsの場合は cmake . でコンパイルするとboopy.slnというVisual Studioのプロジェクトファイルができるので、それをVisual Studioからコンパイルします
- unixの場合は以下でコンパイルするとlibboopy.soというファイルができます
$ cmake . $ make
def boopy_test(): import sys import numarray import libboopy print libboopy.yes() x = libboopy.new_array() print x libboopy.take_array(x) print x z=numarray.array([[0,1],[1,3]], numarray.Float) print z libboopy.take_array(z) print z if __name__ == '__main__': print "running..." import sys boopy_test()
以下の出力が得られる
YES!! [[ 1. 2.2 3. ] [ 4. 5. 6. ] [ 7. 8. 9. ]] [[ 0.5 2.2 3. ] [ 4. 5. 6. ] [ 7. 8. 9. ]] [[ 0. 1.] [ 1. 3.]] [[ 0.5 1. ] [ 1. 3. ]]