[section:building If and How to Build a Boost.Math Library, and its Examples and Tests]

[h4 Building a Library (shared, dynamic .dll or static .lib)]

The first thing you need to ask yourself is "Do I need to build anything at all?"
as the bulk of this library is header only: meaning you can use it just by
#including the necessary header(s).

For most simple uses,
including a header (or few) is best for compile time and program size.

Refer to
[link math_toolkit.extern_c C99 and C++ TR1 C-style Functions]
for pros and cons of using
the TR1 components as opposed to the header only ones.

The ['only] time you ['need] to build the library is if you want to use the
`extern "C"` functions declared in `<boost/math/tr1.hpp>`.  To build this
using Boost.Build, from a commandline boost-root directory issue a command like:

   bjam toolset=gcc --with-math install

that will do the job on Linux, while:

   bjam toolset=msvc --with-math --build-type=complete stage

will work better on Windows (leaving libraries built
in sub-folder `/stage` below your Boost root directory).
Either way you should consult the
[@http://www.boost.org/doc/libs/release/more/getting_started/index.html
getting started guide] for more information.

You can also build the libraries from your favourite IDE or command line tool:
each `extern "C"` function declared in `<boost/math/tr1.hpp>` has its own
source file with the same name in `libs/math/src/tr1`.  Just select the
sources corresponding to the functions you are using and build them into
a library, or else add them directly to your project.  Note that the
directory `libs/math/src/tr1` will need to be in your compiler's
#include path as well as the boost-root directory
(MSVC Tools, Options, Projects and Solutions, VC++ Directories, Include files).

[note If you are using
a Windows compiler that supports auto-linking and you have built the sources
yourself (or added them directly to your project) then you will need to
prevent `<boost/math/tr1.hpp>` from trying to auto-link to the binaries
that Boost.Build generates.  You can do this by defining either
BOOST_MATH_NO_LIB or BOOST_ALL_NO_LIB at project level
(so the defines get passed to each compiler invocation).
]

Optionally the sources in `libs/math/src/tr1` have support for using
`libs/math/src/tr1/pch.hpp` as a precompiled header
['if your compiler supports precompiled headers.]  Note that normally
this header is a do-nothing include: to activate the header so that
it #includes everything required by all the sources you will need to
define BOOST_BUILD_PCH_ENABLED on the command line, both when building
the pre-compiled header and when building the sources.  Boost.Build
will do this automatically when appropriate.

[h4 Building the Examples]

The examples are all located in `libs/math/example`, they can all
be built without reference to any external libraries, either with
Boost.Build using the supplied Jamfile, or from your compiler's
command line.  The only requirement is that the Boost headers are
in your compilers #include search path.

[h4 Building the Tests]

The tests are located in `libs/math/test` and are best built
using Boost.Build and the supplied Jamfile.  If you plan to
build them separately from your favourite IDE then you will
need to add `libs/math/test` to the list of your compiler's
search paths.

You will also need to build and link to
the Boost.Regex library for many of the tests: this can built
from the command line by following the
[@http://www.boost.org/doc/libs/release/more/getting_started/index.html
getting started guide], using a command such as:

   bjam toolset=gcc --with-regex install

or

   bjam toolset=msvc --with-regex --build-type=complete stage

depending on whether you are on Linux or Windows.

Many of the tests have optional precompiled header support
using the header `libs/math/test/pch.hpp`.
Note that normally
this header is a do-nothing include: to activate the header so that
it #includes everything required by all the sources you will need to
define BOOST_BUILD_PCH_ENABLED on the command line, both when building
the pre-compiled header and when building the sources.  Boost.Build
will do this automatically when appropriate.

[endsect]

[/ building.qbk
  Copyright 2006, 2007, 2008, 2010 John Maddock and Paul A. Bristow.
  Distributed under the Boost Software License, Version 1.0.
  (See accompanying file LICENSE_1_0.txt or copy at
  http://www.boost.org/LICENSE_1_0.txt).
]
