Reducing Compiling Time

| Reducing Compiling Time

If you have ever exported a lot of classes, you know that it takes quite a good time to compile the Boost.Python wrappers. Plus the memory consumption can easily become too high. If this is causing you problems, you can split the class_ definitions in multiple files:

`

        /* file point.cpp */
        #include <point.h>
        #include <boost/python.hpp>

        void export_point()
        {
            class_<point>("point")...;
        }

        /* file triangle.cpp */
        #include <triangle.h>
        #include <boost/python.hpp>

        void export_triangle()
        {
            class_<triangle>("triangle")...;
        }

`

Now you create a file `main.cpp`, which contains the `BOOST_PYTHON_MODULE` macro, and call the various export functions inside it.

`

        void export_point();
        void export_triangle();

        BOOST_PYTHON_MODULE(_geom)
        {
            export_point();
            export_triangle();
        }

`

Compiling and linking together all this files produces the same result as the usual approach:

`

        #include <boost/python.hpp>
        #include <point.h>
        #include <triangle.h>

        BOOST_PYTHON_MODULE(_geom)
        {
            class_<point>("point")...;
            class_<triangle>("triangle")...;
        }

`

but the memory is kept under control.

This method is recommended too if you are developing the C++ library and exporting it to Python at the same time: changes in a class will only demand the compilation of a single cpp, instead of the entire wrapper code.

If you're exporting your classes with Pyste, take a look at the `--multiple` option, that generates the wrappers in various files as demonstrated here.

This method is useful too if you are getting the error message "fatal error C1204:Compiler limit:internal structure overflow" when compiling a large source file, as explained in the FAQ.

Copyright © 2002-2003 David Abrahams
Copyright © 2002-2003 Joel de Guzman
Permission to copy, use, modify, sell and distribute this document is granted provided this copyright notice appears in all copies. This document is provided "as is" without express or implied warranty, and with no claim as to its suitability for any purpose.