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 + -
显示快捷键?