[/ Copyright 2013-2018 Daniel James 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) ] [chapter Building documentation using Boost Build [id boost_doc_tools.boost_build] [quickbook 1.6] [source-mode teletype] ] This chapter is an introduction to building boostbook and quickbook documentation using Boost.Build. It assumes you're already a little familiar with using it. [section:simple Simple examples] Starting with the simplest of examples, in [@boost:/tools/quickbook/examples/simple-boostbook/ `tools/quickbook/examples/simple-boostbook/`] you'll find the first example. This consists of a small boostbook file ([@boost:/tools/quickbook/examples/simple-boostbook/simple.xml `tools/quickbook/examples/simple-boostbook/simple.xml`] and a Jamfile to build it, which looks like this: using boostbook ; boostbook simple : simple.xml : boost.root=../../../../.. ; The first line just tells Boost.Build that we'll be using the boostbook toolset: using boostbook ; This isn't needed if you already have a `using boostbook` line in your `user-config.jam` file, but it's useful for other people who don't. Next we specify the build target: boostbook simple : simple.xml : This says that we are creating a document called `simple` from the source file `simple.xml`. `simple` is just an identifier for Boost.Build, html documentation is built in a sub-directory called `html`. After that we write the build parameters: boost.root=../../../../.. This is the bare minimum, it just tells boost build where the root of the boost tree is, so that it can link to things like css and image files which the documentation uses. Getting the value right is a bit tricky - it's relative to the build target, which is the `html` subdirectory. The full path from root will be: `tools/quickbook/examples/simple-boostbook/html`, which has five parts, so the root is five directories up. And finally there's a `;` to end the build target. To build this example, go to the directory in the command line, and run `b2`: cd $BOOST_ROOT cd tools/quickbook/examples/simple-boostbook b2 You do have to be in the correct directory, as Boost.Build always builds the documentation in a subdirectory of the current directory. Having done this the documentation should be at `tools/quickbook/examples/simple-boostbook/html/index.html`. Building quickbook is very similar, there's a corresponding example at [@boost:/tools/quickbook/examples/simple-boostbook/ `tools/quickbook/examples/simple-boostbook/`]. For that case, the Jamfile is: using boostbook ; using quickbook ; xml simple-boostbook : simple.qbk ; boostbook simple : simple-boostbook : boost.root=../../../../.. ; This time it specifies that it's using both `boostbook` and `quickbook`. Then there's a target to build the boostbook representation from quickbook: xml simple-boostbook : simple.qbk ; And finally, the target to build the documentation is almost exactly the same, but instead of having a source file, the source is the boostbook xml generated from the quickbook file. [endsect] [/simple] [section:standalone Building documentation outside of the Boost tree] So far, the documentation has been built inside the boost tree, so it uses the boost css files and images directly from their original location. But when building in a separate repository the css and images files need to be copied into place. You can see an example of this at [@boost:/tools/quickbook/examples/standalone-quickbook/ `tools/quickbook/examples/standalone-quickbook/`]. This is in the boost tree, but it has a `Jamroot.jam` file which makes Boost.Build treat it as its own build tree. Here the Jamfile is: using boostbook ; using quickbook ; xml simple-boostbook : simple.qbk ; boostbook simple : simple-boostbook : css images ; install css : [ glob $(BOOST_ROOT)/doc/src/*.css ] : html ; install images : [ glob $(BOOST_ROOT)/doc/src/images/*.png ] : html/images ; explicit css ; explicit images ; This time the boostbook build target is a little different: boostbook simple : simple-boostbook : css images ; There's no reason to specify `boost.root` as the css and image files are copied into the documentation directory, but it does need to depend on the `css` and `images` targets which do the copying: install css : [ glob $(BOOST_ROOT)/doc/src/*.css ] : html ; install images : [ glob $(BOOST_ROOT)/doc/src/images/*.png ] : html/images ; explicit css ; explicit images ; The `BOOST_ROOT` variable needs is set in the `Jamroot.jam` file. `css` and `images` are marked `explicit`, so that they're only copied when required. [endsect] [/standalone]