2011-12-25 64 views
1

關閉遲了我在一些編碼工作中也使用了一些模板庫,如Boost和Thrust(用於CUDA)。在文件中包含模板庫的所有

對於使用Boost庫的某些功能,必須包含適當的頭文件。對於boost::lexical_cast我必須使用boost/lexical_cast.hpp。爲我的項目使用的每個Boost/Thrust新功能都包含適當的頭文件令人厭倦。

是否有任何「快捷方式」告訴預處理器包含存儲在boost庫下的所有頭文件,這樣我就不必擔心要包含哪個頭文件?

我在Ubuntu下使用GCC。

回答

2

你可以簡單地做一個母所有頭文件,像這樣:

for i in $(find /usr/include/boost/); do echo "#include <"${i/"/usr/include/"/}">"; done > master_header.hpp 

現在,您可以添加和使用預編譯頭(可能需要一個通宵編譯使PCH)。您還應該將-Wl,-as-needed傳遞給鏈接器以避免包含不需要的庫。

正如@sbi所說,這是不可取的,但是因爲你問過......有時候找到一些「無聊」的最好的補救辦法是看看它有多糟糕!

+0

那麼,在技術上回答這個問題,這裏有一個'+ 1'。不過,我說的比「不可取」要嚴厲一些。 – sbi 2011-12-25 23:52:37

+0

@sbi:如果沒有其他,這將是一個有用的練習,使用可用的工具,也許玩PCHs ......當然你是對的,這不是一個現實的解決任何實際問題的解決方案。 – 2011-12-25 23:53:46

+0

我和sbi在這一張上。我還沒有嘗試過,但是我懷疑這可能會讓大人的構建工作站像加載時的小狗一樣喊叫,如果你甚至可以讓它編譯的話。 – sehe 2011-12-25 23:56:53

6

你不想那樣。你想包括儘可能少。編譯時間在C++中是很糟糕的。開始包括所有地方的一切,甚至會變得更糟。

我一直在一個項目中編譯一個體面的單核CPU的時間花了50分鐘,連接5-10分鐘。如果你在模型的基礎上做模板,這會讓你感覺很痛苦。

Boost帶有一堆東西(如MPL),它將編譯器拉伸到極限。在任何地方都包括這些東西是很瘋狂的(除了一個5-cpp-files類型的項目)。

相關問題