前提・実現したいこと
pybind11を用いてC++ファイルをpythonモジュール化したい
その際に、CMakeを用いてC++ファイルをコンパイルしたい
###要約
C++
で書かれたpythonモジュールを作りたいC++
ファイルのcmake
によるコンパイルがうまく行かない- コマンドラインによるコンパイルはうまく行った
発生している問題・エラーメッセージ
https://qiita.com/lucidfrontier45/items/872c38b5eec08e3800d7
以上の記事と全く同じことをやっているのですが、自作モジュールmymodule
をCMake
によってコンパイルしようとしたときに、
bash
1$ mkdir build 2$ cd build 3$ cmake .. 4$ make <---ここでエラーが出る
のmake
コマンドにおいてエラーが出てしまい、
make: *** No targets specified and no makefile found. Stop.
というエラーが出てしまいます。
該当のソースコード
cpp
1#include <pybind11/pybind11.h> 2 3int add(int a, int b) 4{ 5 return a + b; 6} 7 8PYBIND11_MODULE(mymodule, m) 9{ 10 m.doc() = "my test module"; 11 m.def("add", &add, "add two numbers"); 12}
以上の内容のファイルをmymodule.cpp
という名前のファイルにして保存し、以下のCMakeLists.txt
を用いてコンパイルしました。
txt
1cmake_minimum_required(VERSION 3.2) 2project(pybind_test VERSION 0.1.0) 3 4add_subdirectory(pybind11) 5pybind11_add_module(mymodule mymodule.cpp)
どなたかわかる方がいらっしゃったら、回答をよろしくおねがいします。
試したこと
コマンドによるコンパイルは、以下のコマンドを実行することで成功しました。
bash
1c++ -O3 -Wall -shared -std=c++11 -fPIC `python3 -m pybind11 --includes` -undefined dynamic_lookup mymodule.cpp -o mymodule`python3-config --extension-suffix`
生成された実行ファイルの名前は、mymodule.cpython-39-darwin.so
となったので、python3.9によってコンパイルされた?ものだと思います。
またCMakeでpythonのバージョンを指定しようとして、
cmake
コマンドにおいて、
bash
1cmake -DPYTHON_EXECUTABLE=/usr/local/bin/python3 ..
としても、同様に失敗してしまいます。
補足情報(FW/ツールのバージョンなど)
https://qiita.com/sff1019/items/bcc0289f6d2912d5ba8a(コンパイルのときのコマンドはここを参照しました。)
あなたの回答
tips
プレビュー