You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							53 lines
						
					
					
						
							2.0 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							53 lines
						
					
					
						
							2.0 KiB
						
					
					
				
								Build systems
							 | 
						|
								#############
							 | 
						|
								
							 | 
						|
								Building with setuptools
							 | 
						|
								========================
							 | 
						|
								
							 | 
						|
								For projects on PyPI, building with setuptools is the way to go. Sylvain Corlay
							 | 
						|
								has kindly provided an example project which shows how to set up everything,
							 | 
						|
								including automatic generation of documentation using Sphinx. Please refer to
							 | 
						|
								the [python_example]_ repository.
							 | 
						|
								
							 | 
						|
								.. [python_example] https://github.com/pybind/python_example
							 | 
						|
								
							 | 
						|
								Building with cppimport
							 | 
						|
								========================
							 | 
						|
								
							 | 
						|
								 cppimport is a small Python import hook that determines whether there is a C++
							 | 
						|
								 source file whose name matches the requested module. If there is, the file is
							 | 
						|
								 compiled as a Python extension using pybind11 and placed in the same folder as
							 | 
						|
								 the C++ source file. Python is then able to find the module and load it.
							 | 
						|
								
							 | 
						|
								.. [cppimport] https://github.com/tbenthompson/cppimport
							 | 
						|
								
							 | 
						|
								.. _cmake:
							 | 
						|
								
							 | 
						|
								Building with CMake
							 | 
						|
								===================
							 | 
						|
								
							 | 
						|
								For C++ codebases that have an existing CMake-based build system, a Python
							 | 
						|
								extension module can be created with just a few lines of code:
							 | 
						|
								
							 | 
						|
								.. code-block:: cmake
							 | 
						|
								
							 | 
						|
								    cmake_minimum_required(VERSION 2.8.12)
							 | 
						|
								    project(example)
							 | 
						|
								
							 | 
						|
								    add_subdirectory(pybind11)
							 | 
						|
								    pybind11_add_module(example example.cpp)
							 | 
						|
								
							 | 
						|
								This assumes that the pybind11 repository is located in a subdirectory named
							 | 
						|
								:file:`pybind11` and that the code is located in a file named :file:`example.cpp`.
							 | 
						|
								The CMake command ``add_subdirectory`` will import a function with the signature
							 | 
						|
								``pybind11_add_module(<name> source1 [source2 ...])``. It will take care of all
							 | 
						|
								the details needed to build a Python extension module on any platform.
							 | 
						|
								
							 | 
						|
								The target Python version can be selected by setting the ``PYBIND11_PYTHON_VERSION``
							 | 
						|
								variable before adding the pybind11 subdirectory. Alternatively, an exact Python
							 | 
						|
								installation can be specified by setting ``PYTHON_EXECUTABLE``.
							 | 
						|
								
							 | 
						|
								A working sample project, including a way to invoke CMake from :file:`setup.py` for
							 | 
						|
								PyPI integration, can be found in the [cmake_example]_  repository.
							 | 
						|
								
							 | 
						|
								.. [cmake_example] https://github.com/pybind/cmake_example
							 |