2010-08-28 96 views
1

我想加快我的C++項目的編譯時間,我想知道如果我目前的結構可能會導致不必要的重新編譯。C++單頭文件結構

我有* .cc和相應的* .h文件,但是我所有的* .cc文件都包含一個單獨的頭文件main.h。

在main.h中,我包含了所有必需的和extern全局變量並聲明瞭我使用的函數。基本上,我沒有使用任何命名空間。

這是一個糟糕的設計,可能導致不必要的重新編譯和緩慢的構建?

回答

3

這取決於。如果main.h很少修改,那麼可以使用預編譯頭文件,這將大大縮短編譯時間。另一方面,如果經常使用main.h,它可能不是一個好的設計。

將所有內容放在一個包含文件中引入的另一個問題是,它不會真正在應用程序中促進結構。在精心設計的應用程序中,您通常會有一個分層結構。通過將所有內容放入一個包含文件中,可以在應用程序中混淆結構。這可能適用於一個小應用程序,但如果您的應用程序增長,您將有一天完成一個完整的意大利細麪條,其中一切都取決於其他一切。

嘗試將包含文件拆分爲多個部分。通常,每個類將有一個.cpp和一個.h文件。儘可能在包含文件中使用前向聲明,並且只包含(在.h和.cpp中)真正需要的內容。

0

這樣的設計肯定會導致構建時間變慢。當你開始構建文件和IDE時,它們會檢查自上次編譯以來哪些源(cc)文件已被修改。它還檢查源文件取決於的任何文件是否已被修改。源文件取決於它包含的所有頭文件,以及這些頭文件包含的所有頭文件等。如果它檢測到任何修改,則重新編譯該源文件。

由於您的設置意味着每個源文件都包含每個單獨的頭文件,所以無論何時修改單個頭文件,您都需要重新編譯每個源文件。

你一定想嘗試分離一些東西,擺脫你的main.h文件。順便說一下,通常人們會盡量減少包含在頭文件中的頭文件的數量,並希望將源文件中的頭文件保留下來。