質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

CMake

CMakeはクロスプラットフォームで作動するオープンソースのビルドシステムです。コマンドライン又は組み込まれた開発環境で使うことができる元のmakefileとプロジェクトファイルを生成します。

terminal

Terminalは、Apple社のmacOSに標準で付属しているUNIX端末エミュレータ。UNIXコマンドによってMacの操作および設定を行うことができます。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

0回答

2684閲覧

CMakeによるpybind11を用いたC++のコンパイルがうまくできない

kaneko_

総合スコア10

bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

CMake

CMakeはクロスプラットフォームで作動するオープンソースのビルドシステムです。コマンドライン又は組み込まれた開発環境で使うことができる元のmakefileとプロジェクトファイルを生成します。

terminal

Terminalは、Apple社のmacOSに標準で付属しているUNIX端末エミュレータ。UNIXコマンドによってMacの操作および設定を行うことができます。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/05/03 09:27

前提・実現したいこと

pybind11を用いてC++ファイルをpythonモジュール化したい
その際に、CMakeを用いてC++ファイルをコンパイルしたい

###要約

  • C++で書かれたpythonモジュールを作りたい
  • C++ファイルのcmakeによるコンパイルがうまく行かない
  • コマンドラインによるコンパイルはうまく行った

発生している問題・エラーメッセージ

https://qiita.com/lucidfrontier45/items/872c38b5eec08e3800d7

以上の記事と全く同じことをやっているのですが、自作モジュールmymoduleCMakeによってコンパイルしようとしたときに、

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(コンパイルのときのコマンドはここを参照しました。)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yumetodo

2021/05/03 10:34

使用したpybind11のバージョンはなんでしょうか?手元のwindows10 msys2+pybind11 2.6.2ではうまく行っているもので・・・
kaneko_

2021/05/03 12:38

私の環境もpybind11 2.6.2でした。 また、デフォルトのpythonはpython2です。 mac OS CatalinaをVScodeのterminal(bash)から操作しています。
yumetodo

2021/05/04 05:15

python3にしてみるとどうですかね
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問