如何使用Boost Asio减少编译时间

Boost.Asio是一个很棒的库,但它有一个巨大的缺点 - 编译时间极慢。 HTTP协议(大约1k行代码)的简单实现(非常简单)需要大约13.5秒才能在GCC 4.4下编译! 我尝试使用PCH,但它不会过多地改善编译时间(仅约1秒)。 那么有没有关于如何使Boost.Asio编译时间更快的教程? 例如,我应该为哪个类准确包含哪些标题。 我用的例如:
io_service
tcp::ip::sockets
tcp::ip::acceptor
deadline_timer
,缓冲区 很少有像
async_read
async_write
这样的功能。 有什么建议? P.S。:我尽可能使用pimpl。     
已邀请:
什么平台?在Linux上,ccache和distcc都很棒,包含在大多数发行版中,并且可以单独或甚至组合设置。     
您是否使用
boost::lambda
boost::bind
构建完成处理程序?
boost::bind
不太复杂=>编译速度更快。 您可以使用#pragma message()来分析编译器,以查看它是#include还是需要时间的实际编译。我已经将它与MSVS一起使用,有时候,大多数编译时间都在.cpp中的任何代码之前,有时候,它主要是在之后。这可以帮助您分析编译器的性能。 (但是,如果预处理器/ #include是快速的并且在其他任何东西之前运行,它将不会给你太多)     
好吧,你很久以前就解决了这个问题。但为了以防万一。 预编译的头文件不会神奇地改善编译时间。它们通过缓存第一个标头评估来改进交叉转换单元编译时间。因此,除非您在多个源文件中使用ASIO,否则您将看不到任何好处。任何新的模板实例化都将进一步使最后的好处更加明显。 我建议将ASIO隔离到单个源文件。不要在任何“非详细信息”头文件中包含ASIO。如果必须执行后者,请尝试使用Pimpl模式隐藏它。 如果您发现自己需要在多个源文件中使用ASIO功能,那么请考虑在代码和ASIO之间构建抽象层。如果你保持尽可能简单,确保桥接代码永远不会改变,那么你甚至可以在PCH中使用这个界面。     
我们正在使用boost thread,asio和一些其他库,包括Qt。使用预编译的头文件可以使构建时间缩短10:1。我们提到以下指导: http://www.cygnus-software.com/papers/precompiledheaders.html 有一些方法可以进行预先建议的标题,这样它们就不会渗透到每个文件中并使Windows代码化。     

要回复问题请先登录注册