Speed up compilation/link time when using boost libraries
I'm using Boost Program Options, and it takes quite a while (1开发者_运维知识库0 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.
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, likeboost/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.
I had good success with the compiler firewall idiom to reduce compile times.
精彩评论