C++でPython開発したい

構造がシンプルそうなpybind11を利用してやってみる。

pybind11 はサブモジュールとして設定されているので、
git clone したら
git submodule update --init --recursive
する。
ビルドする時は、cmakeのコマンドを実行するのではなく、Pythonのsetup.py側にcmakeコマンドが
書かれているので、
pip install ### で、ビルドができるようになっている。

setup.py の内容のメモ。
CMakeExtension の継承もとのExtensionは、C++拡張モジュールを表す。setupの ext_modules で、ビルドする拡張モジュールを指定。

cmdclass で、コマンド名からCmommandサブクラスへのマッピング。
このマッピングされているクラス内で、
cmakeのコマンドを作り、subprocessで実行している。

マッピングしている build_ext は、パッケージ中の拡張を構築する。
他には build_clib( パッケージ中のCライブラリを構築) build_py パtぅケージ中の .py .pycファイルを構築
というのがある。
マッピング用の dict の key がこのいずれか、実際にマッピングされた動作本体が、dictのvalueとして指定されたクラス。

マッピングコマンドはこれ以下。


setup.py 側の書き方参考。

setup.pyの公式Help

準備する必要があるのは
setup.py CMakeLists.txt pybind11をサブモジュール化。
C++側の関数を呼び出すには
PYBIND11_MODULE を使う。
m.def(名前、呼び出す関数、docs);
で登録。

PythonでImportしたときに
dynamic module does not define module export function pybind11
でエラーになる。
これは
PYBIND11_MODULE(cmake_example, m)
{
}
ここで指定する モジュール名と、CMakeLists.txtやsetup.py で指定するモジュール名が
一致していないとだめだった。
個々の名前は
CMakeLists.txtの
add_subdirectory(pybind11)
pybind11_add_module(cmake_example src/main.cpp)
ここ。

setup.cfgについて
setup.py の setup() の中身を別ファイルに分離できる。