2011-02-17 71 views
11

我使用的是Boost Program Options,编译非常小的C++代码需要很长时间(10秒甚至更多)。花了1秒钟的时间编译没有增强库的代码。使用boost库加快编译/链接时间

任何想法如何提高编译/链接时间与增强库?它是跨平台的,所以我需要用Mac OS X/Linux/PC编译代码。

+1

提升的某些部分非常有用。许多组件虽然看起来被过度工程化,并且仅仅因为它们仅在头文件中实现而得到了糟糕的头文件依赖性。所以你最终不必要地重新编译boost代码,而静态或共享库会很好地完成。 – 2011-02-17 15:55:45

+1

几乎所有足够现代编译Boost的编译器也支持预编译头文件。这些概念上相当于仅用于纯文本头库的静态库。 – MSalters 2011-02-17 16:38:34

+0

看到这里,http://www.boost.org/boost-build2/doc/html/bbv2/reference/precompiled_headers.html – Dilawar 2012-01-08 22:43:02

回答

15

确实没有什么可以做,除了通常的招数:

  • 减少依赖:拉只有你真正需要的Boost头文件,并用具体头地(许多图书馆有一个单一的“主”报头,如boost/thread.hpp,也与特定的头文件的子目录,像boost/thread/shared_mutex.hpp),
  • 如有可能,依靠前向声明,而不是包括整个标题,
  • 如果可能的话,包括仅在头部.cpp文件。如果将其包含在标题中,则每次编译包含该标题的翻译单元时都必须对其进行编译。根据一般经验,尽量减少头文件中的代码量,所有主要编译器都支持预编译头文件。使用这些来减少编译时间,
  • 实验unity builds。这可能会或可能不会成为您的优势。

最后但并非最不重要的是,最后一个选项就是不使用这些特定的Boost库。

为了方便起见,我有时候会使用某些Boost库,如果/编译时间变得太糟糕,我开始考虑编译哪些库是昂贵的,哪些库可以用相对简单的代码替换。通常情况下,Boost受到如此普遍的要求的限制。如果你不需要对8年前的编译器有用的东西,或者不需要跨越很多不同类型的东西,那么你可以写一个简单的替代品,它适合你,几乎不需要时间编译。