2013-03-01 92 views
1

我正在創建一個依賴大量boost庫的軟件,並且隨着編譯變得越來越慢(分鐘),我已經打包了所有使用過的庫在一個預編譯頭文件中(比如20-ish boost libs和20 std libs),希望它能解決這個問題。使用boost庫的預編譯頭文件需要非常長的編譯

今天,我意識到一個香草hello-world.cpp(甚至不包括該死的預編譯頭文件)在我編譯時使用預編譯頭文件需要15s來構建。預編譯頭文件大小爲300MB左右。

因此,問題是:

-is那種放緩的預期,這種規模的預編譯頭? (我特別希望我犯了某種mon mistake不馴的錯誤,如果你們其中一位可以告訴我他經常使用2GB預編譯頭文件,並且事情很順利),我會非常高興

- 如果這種預計會減速,然後我完全不相信預編譯頭文件的有用性。我錯過了什麼嗎?

編譯:

gcc version 4.4.5 (Debian 4.4.5-8) 

命令行:

g++ -include common-header.hpp -Winvalid-pch -c vanilla-hello-world.cpp 
+0

通過預編譯你的意思是預處理?標題不是獨立的翻譯單元,不能根據我的知識進行「預編譯」。 – djechlin 2013-03-01 17:55:04

+0

thats vanilla-hello-world.cpp和Gurg如果需要15秒才能構建一個不包含頭文件的編程,那麼就存在一個問題。 – nsthethunderbolt 2013-03-01 17:56:34

+0

這是[鏈接](http://en.wikipedia。org/wiki/Precompiled_header),然後 – 2013-03-01 17:56:53

回答

0

包裝反覆使用的預編譯頭

這是你的問題的所有庫,只包括什麼你需要。

每個TU仍然需要諮詢這個龐大的預先壓縮的標題。

+0

不知道我跟着你:反覆使用的庫肯定是需要的庫,這使得它們成爲包含的良好候選者(?!) – 2013-03-01 18:04:11

+0

好的,所以這是一個答案: PCH得到了真正的太大了,這讓我放慢了速度。 如何將項目分解成不同的編譯單元(使用自己的PCH)來解決編譯時間問題。 – 2013-03-06 14:58:49

+0

@GurgHackpof很高興幫助 – 111111 2013-03-06 15:08:42

0

的vanilla_hello_world.cpp文件應與預編譯頭(比之前的評論之外的任何其他C++語句的#include開始

你的問題應該包括使用的命令行,並通過所產生的控制檯消息:

  1. 編譯PCH
  2. 編譯vanilla_hello_world.cpp而不PCH
  3. 編譯vanilla_hello_world.cpp使用PCH該命令的命令的命令。

使用「time gcc ...」顯示上述每一項的時間。

如果PCH正在工作,則時間#3將小於時間#2。

時間#1 +時間#2很可能會大於#3。 PCH的要點是很少需要(通常只有一次)。