Wenzel Jakob | 4a48afb | 2016-03-09 21:31:21 +0100 | [diff] [blame] | 1 | Build systems |
| 2 | ############# |
| 3 | |
| 4 | Building with setuptools |
| 5 | ======================== |
| 6 | |
| 7 | For projects on PyPI, building with setuptools is the way to go. Sylvain Corlay |
| 8 | has kindly provided an example project which shows how to set up everything, |
| 9 | including automatic generation of documentation using Sphinx. Please refer to |
| 10 | the [pbtest]_ repository. |
| 11 | |
| 12 | .. [pbtest] https://github.com/pybind/pbtest |
| 13 | |
Wenzel Jakob | a439cca | 2016-05-17 10:47:52 +0200 | [diff] [blame] | 14 | Building with cppimport |
| 15 | ======================== |
| 16 | |
| 17 | cppimport is a small Python import hook that determines whether there is a C++ |
| 18 | source file whose name matches the requested module. If there is, the file is |
| 19 | compiled as a Python extension using pybind11 and placed in the same folder as |
| 20 | the C++ source file. Python is then able to find the module and load it. |
| 21 | |
| 22 | .. [cppimport] https://github.com/tbenthompson/cppimport |
| 23 | |
Wenzel Jakob | 28f98aa | 2015-10-13 02:57:16 +0200 | [diff] [blame] | 24 | .. _cmake: |
| 25 | |
| 26 | Building with CMake |
| 27 | =================== |
| 28 | |
Dean Moldovan | 24ddf4b | 2016-05-27 00:11:52 +0200 | [diff] [blame^] | 29 | For C++ codebases that have an existing CMake-based build system, a Python |
| 30 | extension module can be created with just a few lines of code: |
Wenzel Jakob | 28f98aa | 2015-10-13 02:57:16 +0200 | [diff] [blame] | 31 | |
| 32 | .. code-block:: cmake |
| 33 | |
Dean Moldovan | 24ddf4b | 2016-05-27 00:11:52 +0200 | [diff] [blame^] | 34 | cmake_minimum_required(VERSION 2.8.12) |
Wenzel Jakob | 28f98aa | 2015-10-13 02:57:16 +0200 | [diff] [blame] | 35 | project(example) |
| 36 | |
Dean Moldovan | 24ddf4b | 2016-05-27 00:11:52 +0200 | [diff] [blame^] | 37 | add_subdirectory(pybind11) |
| 38 | pybind11_add_module(example example.cpp) |
Wenzel Jakob | f64feaf | 2016-04-28 14:33:45 +0200 | [diff] [blame] | 39 | |
Dean Moldovan | 24ddf4b | 2016-05-27 00:11:52 +0200 | [diff] [blame^] | 40 | This assumes that the pybind11 repository is located in a subdirectory named |
| 41 | :file:`pybind11` and that the code is located in a file named :file:`example.cpp`. |
| 42 | The CMake command ``add_subdirectory`` will import a function with the signature |
| 43 | ``pybind11_add_module(<name> source1 [source2 ...])``. It will take care of all |
| 44 | the details needed to build a Python extension module on any platform. |
Wenzel Jakob | 28f98aa | 2015-10-13 02:57:16 +0200 | [diff] [blame] | 45 | |
Dean Moldovan | 24ddf4b | 2016-05-27 00:11:52 +0200 | [diff] [blame^] | 46 | The target Python version can be selected by setting the ``PYBIND11_PYTHON_VERSION`` |
| 47 | variable before adding the pybind11 subdirectory. Alternatively, an exact Python |
| 48 | installation can be specified by setting ``PYTHON_EXECUTABLE``. |
Wenzel Jakob | 28f98aa | 2015-10-13 02:57:16 +0200 | [diff] [blame] | 49 | |
Dean Moldovan | 24ddf4b | 2016-05-27 00:11:52 +0200 | [diff] [blame^] | 50 | A working sample project, including a way to invoke CMake from :file:`setup.py` for |
| 51 | PyPI integration, can be found in the [cmake_example]_ repository. |
Wenzel Jakob | caa9d44 | 2016-01-17 22:36:34 +0100 | [diff] [blame] | 52 | |
Dean Moldovan | 24ddf4b | 2016-05-27 00:11:52 +0200 | [diff] [blame^] | 53 | .. [cmake_example] https://github.com/dean0x7d/pybind11_cmake_example |