2011-02-17 70 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年前的編譯器有用的東西,或者不需要跨越很多不同類型的東西,那麼你可以寫一個簡單的替代品,它適合你,幾乎不需要時間編譯。