building.rst
来自「Boost provides free peer-reviewed portab」· RST 代码 · 共 681 行 · 第 1/2 页
RST
681 行
__ http://www.boost.orgdoc/html/bbv2/advanced.html#bbv2.advanced.configuration.. Admonition:: Users of Unix-Variant OSes If you are using a unix-variant OS and you ran Boost's ``configure`` script, it may have generated a ``user-config.jam`` for you. [#overwrite]_ If your ``configure``\ /\ ``make`` sequence was successful and Boost.Python binaries were built, your ``user-config.jam`` file is probably already correct.If you have one fairly “standard” python installation for yourplatform, you might not need to do anything special to describe it. Ifyou haven't configured python in ``user-config.jam`` (and you don'tspecify ``--without-python`` on the Boost.Build command line),Boost.Build will automatically execute the equivalent of :: import toolset : using ; using python ;which automatically looks for Python in the most likely places.However, that only happens when using the Boost.Python project file(e.g. when referred to by another project as in the quickstart_method). If instead you are linking against separately-compiledBoost.Python binaries, you should set up a ``user-config.jam`` filewith at least the minimal incantation above.Python Configuration Parameters-------------------------------If you have several versions of Python installed, or Python isinstalled in an unusual way, you may want to supply any or all ofthe following optional parameters to ``using python``.version the version of Python to use. Should be in Major.Minor format, for example, ``2.3``. Do not include the subminor version (i.e. *not* ``2.5.1``). If you have multiple Python versions installed, the version will usually be the only configuration argument required.cmd-or-prefix preferably, a command that invokes a Python interpreter. Alternatively, the installation prefix for Python libraries and header files. Only use the alternative formulation if there is no appropriate Python executable available.includes the ``#include`` paths for Python headers. Normally the correct path(s) will be automatically deduced from ``version`` and/or ``cmd-or-prefix``. libraries the path to Python library binaries. On MacOS/Darwin, you can also pass the path of the Python framework. Normally the correct path(s) will be automatically deduced from ``version`` and/or ``cmd-or-prefix``. condition if specified, should be a set of Boost.Build properties that are matched against the build configuration when Boost.Build selects a Python configuration to use. See examples below for details.extension-suffix A string to append to the name of extension modules before the true filename extension. You almost certainly don't need to use this. Usually this suffix is only used when targeting a Windows debug build of Python, and will be set automatically for you based on the value of the |python-debugging|_ feature. However, at least one Linux distribution (Ubuntu Feisty Fawn) has a specially configured `python-dbg`__ package that claims to use such a suffix... |python-debugging| replace:: ``<python-debugging>``__ https://wiki.ubuntu.com/PyDbgBuildsExamples--------Note that in the examples below, case and *especially whitespace* aresignificant.- If you have both python 2.5 and python 2.4 installed, ``user-config.jam`` might contain:: using python : 2.5 ; # Make both versions of Python available using python : 2.4 ; # To build with python 2.4, add python=2.4 # to your command line. The first version configured (2.5) becomes the default. To build against python 2.4, add ``python=2.4`` to the ``bjam`` command line.- If you have python installed in an unusual location, you might supply the path to the interpreter in the ``cmd-or-prefix`` parameter:: using python : : /usr/local/python-2.6-beta/bin/python ;- If you have a separate build of Python for use with a particular toolset, you might supply that toolset in the ``condition`` parameter:: using python ; # use for most toolsets # Use with Intel C++ toolset using python : # version : c:\\Devel\\Python-2.5-IntelBuild\\PCBuild\\python # cmd-or-prefix : # includes : # libraries : <toolset>intel # condition ;- If you have downloaded the Python sources and built both the normal and the “\ `python debugging`_\ ” builds from source on Windows, you might see:: using python : 2.5 : C:\\src\\Python-2.5\\PCBuild\\python ; using python : 2.5 : C:\\src\\Python-2.5\\PCBuild\\python_d : # includes : # libs : <python-debugging>on ;- You can set up your user-config.jam so a bjam built under Windows can build/test both Windows and Cygwin_ python extensions. Just pass ``<target-os>cygwin`` in the ``condition`` parameter for the cygwin python installation:: # windows installation using python ; # cygwin installation using python : : c:\\cygwin\\bin\\python2.5 : : : <target-os>cygwin ; when you put target-os=cygwin in your build request, it should build with the cygwin version of python: [#flavor]_ bjam target-os=cygwin toolset=gcc This is supposed to work the other way, too (targeting windows python with a Cygwin_ bjam) but it seems as though the support in Boost.Build's toolsets for building that way is broken at the time of this writing.- Note that because of `the way Boost.Build currently selects target alternatives`__, you might have be very explicit in your build requests. For example, given:: using python : 2.5 ; # a regular windows build using python : 2.4 : : : : <target-os>cygwin ; building with :: bjam target-os=cygwin will yield an error. Instead, you'll need to write:: bjam target-os=cygwin/python=2.4.. _Cygwin: http://cygwin.com__ http://zigzag.cs.msu.su/boost.build/wiki/AlternativeSelectionChoosing a Boost.Python Library Binary======================================If—instead of letting Boost.Build construct and link with the rightlibraries automatically—you choose to use a pre-built Boost.Pythonlibrary, you'll need to think about which one to link with. TheBoost.Python binary comes in both static and dynamic flavors. Takecare to choose the right flavor for your application. [#naming]_The Dynamic Binary------------------The dynamic library is the safest and most-versatile choice:- A single copy of the library code is used by all extension modules built with a given toolset. [#toolset-specific]_- The library contains a type conversion registry. Because one registry is shared among all extension modules, instances of a class exposed to Python in one dynamically-loaded extension module can be passed to functions exposed in another such module.The Static Binary-----------------It might be appropriate to use the static Boost.Python library inany of the following cases:- You are extending_ python and the types exposed in your dynamically-loaded extension module don't need to be used by any other Boost.Python extension modules, and you don't care if the core library code is duplicated among them.- You are embedding_ python in your application and either: - You are targeting a Unix variant OS other than MacOS or AIX, where the dynamically-loaded extension modules can “see” the Boost.Python library symbols that are part of the executable. - Or, you have statically linked some Boost.Python extension modules into your application and you don't care if any dynamically-loaded Boost.Python extension modules are able to use the types exposed by your statically-linked extension modules (and vice-versa).``#include`` Issues===================1. If you should ever have occasion to ``#include "python.h"`` directly in a translation unit of a program using Boost.Python, use ``#include "boost/python/detail/wrap_python.hpp"`` instead. It handles several issues necessary for use with Boost.Python, one of which is mentioned in the next section.2. Be sure not to ``#include`` any system headers before ``wrap_python.hpp``. This restriction is actually imposed by Python, or more properly, by Python's interaction with your operating system. See http://docs.python.org/ext/simpleExample.html for details... _python-debugging:.. _python debugging:Python Debugging Builds=======================Python can be built in a special “python debugging” configurationthat adds extra checks and instrumentation that can be very usefulfor developers of extension modules. The data structures used bythe debugging configuration contain additional members, so **aPython executable built with python debugging enabled cannot beused with an extension module or library compiled without it, andvice-versa.**Since pre-built “python debugging” versions of the Pythonexecutable and libraries are not supplied with most distributionsof Python, [#get-debug-build]_ and we didn't want to force our usersto build them, Boost.Build does not automatically enable pythondebugging in its ``debug`` build variant (which is the default).Instead there is a special build property called``python-debugging`` that, when used as a build property, willdefine the right preprocessor symbols and select the rightlibraries to link with.On unix-variant platforms, the debugging versions of Python's datastructures will only be used if the symbol ``Py_DEBUG`` is defined.On many windows compilers, when extension modules are built withthe preprocessor symbol ``_DEBUG``, Python defaults to forcelinking with a special debugging version of the Python DLL. Sincethat symbol is very commonly used even when Python is not present,Boost.Python temporarily undefines _DEBUG when Python.his #included from ``boost/python/detail/wrap_python.hpp`` - unless``BOOST_DEBUG_PYTHON`` is defined. The upshot is that if you want“python debugging”and you aren't using Boost.Build, you should makesure ``BOOST_DEBUG_PYTHON`` is defined, or python debugging will besuppressed.Testing Boost.Python====================To run the full test suite for Boost.Python, invoke ``bjam`` in the``libs/python/test`` subdirectory of your Boost distribution.Notes for MinGW (and Cygwin with -mno-cygwin) GCC Users=======================================================If you are using a version of Python prior to 2.4.1 with a MinGWprior to 3.0.0 (with binutils-2.13.90-20030111-1), you will need tocreate a MinGW-compatible version of the Python library; the oneshipped with Python will only work with a Microsoft-compatiblelinker. Follow the instructions in the “Non-Microsoft” section ofthe “Building Extensions: Tips And Tricks” chapter in `InstallingPython Modules`__ to create ``libpythonXX.a``, where ``XX``corresponds to the major and minor version numbers of your Pythoninstallation.__ http://www.python.org/doc/current/inst/index.html-----------------------------.. [#2.2] Note that although we tested earlier versions of Boost.Python with Python 2.2, and we don't *think* we've done anything to break compatibility, this release of Boost.Python may not have been tested with versions of Python earlier than 2.4, so we're not 100% sure that python 2.2 and 2.3 are supported... [#naming] Information about how to identify the static and dynamic builds of Boost.Python: * `on Windows`__ * `on Unix variants`__ __ ../../../more/getting_started/windows.html#library-naming __ ../../../more/getting_started/unix-variants.html#library-naming.. [#toolset-specific] Because of the way most \*nix platforms share symbols among dynamically-loaded objects, I'm not certain that extension modules built with different compiler toolsets will always use different copies of the Boost.Python library when loaded into the same Python instance. Not using different libraries could be a good thing if the compilers have compatible ABIs, because extension modules built with the two libraries would be interoperable. Otherwise, it could spell disaster, since an extension module and the Boost.Python library would have different ideas of such things as class layout. I would appreciate someone doing the experiment to find out what happens... [#overwrite] ``configure`` overwrites the existing ``user-config.jam`` in your home directory (if any) after making a backup of the old version... [#flavor] Note that the ``<target-os>cygwin`` feature is different from the ``<flavor>cygwin`` subfeature of the ``gcc`` toolset, and you might need handle both explicitly if you also have a MinGW GCC installed... [#home-dir] Windows users, your home directory can be found by typing:: ECHO %HOMEDRIVE%%HOMEPATH% into a `command prompt`_ window... [#get-debug-build] On Unix and similar platforms, a debugging python and associated libraries are built by adding ``--with-pydebug`` when configuring the Python build. On Windows, the debugging version of Python is generated by the "Win32 Debug" target of the Visual Studio project in the PCBuild subdirectory of a full Python source code distribution.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?