[英]How to reduce compilation times with Boost Asio
Boost.Asio是一個很棒的庫,但它有一個巨大的缺點 - 編譯時間極慢。 HTTP協議(大約1k行代碼)的簡單實現(非常簡單)需要在GCC 4.4下編譯大約13.5秒!
我嘗試使用PCH,但它沒有太多改進編譯時間(僅約1秒)。
那么有沒有關於如何使Boost.Asio編譯時間更快的教程?
例如,我應該為哪個類准確包含哪些標題。
我用的例如: io_service
, tcp::ip::sockets
, tcp::ip::acceptor
, deadline_timer
,buffers和async_read
, async_write
等少數函數。
有什么建議么?
PS:我盡可能使用pimpl。
boost::lambda
或boost::bind
構建你的完成處理程序嗎? boost::bind
不那么復雜=>編譯得更快。 好吧,你很久以前就解決了這個問題。 但為了以防萬一。
預編譯的頭文件不會神奇地改善編譯時間。 compile times by cacheing the first header evaluation. 它們通過緩存第一個頭評估來改進編譯時間。 因此,除非您跨多個源文件#include
ing ASIO,否則您將看不到任何好處。 任何新的模板實例化都將進一步使最后的好處更加明顯。
我建議將ASIO隔離到單個源文件。 不要在任何“非詳細信息”頭文件中包含ASIO。 如果必須執行后者,請嘗試使用Pimpl模式隱藏它。
如果您發現自己需要在多個源文件中使用ASIO功能,那么請考慮在代碼和ASIO之間構建抽象層。 如果你保持盡可能簡單,確保橋接代碼永遠不會改變,那么你甚至可以在PCH中#include
這個接口。
我們正在使用boost thread,asio和一些其他庫,包括Qt。 使用預編譯的頭文件可以使構建時間縮短10:1。 我們提到以下指導:
http://www.cygnus-software.com/papers/precompiledheaders.html
有一些方法可以進行預先建議的標題,這樣它們就不會滲透到每個文件中並使用Windows化代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.