Speed up compilation/link time when using boost libraries

prosseek picture prosseek · Feb 17, 2011 · Viewed 8.6k times · Source

I'm using Boost Program Options, and it takes quite a while (10 seconds or even more) for compiling very small C++ code with it. It took 1 second compiling the code without boost library.

Any idea how to boost compilation/link time with boost library? It's cross platform, so I need to compile the code with Mac OS X/Linux/PC.

Answer

jalf picture jalf · Feb 17, 2011

There isn't really much you can do beyond the usual tricks:

  • minimize dependencies: pull in only the Boost headers you really need, and use as specific headers as possible (many libraries have a single "master" header, such as boost/thread.hpp, but also a subdirectory with specific headers, like boost/thread/shared_mutex.hpp),
  • where possible, rely on forward declarations instead of including the entire header,
  • if possible, include the header only in a .cpp file. If you include it in a header, it has to be compiled every time a translation unit which includes that header is compiled. As a general rule of thumb, try to minimize the amount of code you have in headers,
  • all major compilers support precompiled headers. Use those to cut down compilation time,
  • experiment with unity builds. That may or may not be an advantage in your case.

And last, but not least, a final option is just to not use those specific Boost libraries.

I sometimes use certain Boost libs early on, out of convenience, and if/when compilation time gets too bad, I start looking at which libraries are expensive to compile, and which ones could be replaced by relatively simple code. Often, Boost is encumbered by the requirement to be so general. If you don't need something that works on 8 year old compilers, or which doesn't have to work across quite so many different types, then you may be able to write a simple replacement which works for you, and takes almost no time to compile.