2011-07-26 86 views
6

有沒有辦法大幅度減少提升所需的頭文件的數量?理想情況下,我要求Boost人員找到一種方法來縮小產品尺寸。但同時,有沒有辦法包含boost,但是沒有幾千個頭文件需要處理?處理Boost頭文件

是否有一個C++機制可以將數千個頭文件「捆綁」成一個「包」,並將這個單個文件檢入源代碼控制?

我想這裏的問題是源代碼管理。對所有這些文件進行處理時,執行diff,svn st和check out是非常緩慢的。

+3

只有第一次簽入/簽出速度很慢,但是正確嗎?我懷疑你正在對boost頭文件進行重大更改,因此一旦它們在第一次結帳時被下載,後續簽出就不必更新版本。這是假設你的源代碼控制機制是相對理智的。 – Chad

+2

除了Chad說的話之外,我傾向於不檢查第三方庫到源代碼控制中,除非我計劃自己修改代碼。相反,只需將庫存檔,並在項目中包含有關如何編譯的構建指令。 – Praetorian

+0

「處理」是什麼意思?我發現使用預編譯頭文件可以成爲一個真正的編譯器,在使用Boost.GIL時,可以將小編程的編譯速度從10+秒加速到幾分之一秒。 –

回答

9

Boost提供了一個名爲BCP的工具。 BCP允許您提取增強的子集。它還可以分析源代碼樹並只提取源代碼樹使用的Boost組件。

2

我建議把你的第三方庫放在一個單獨的版本庫中。 Boost模板很重,所以他們不要捆綁頭文件是一個很好的理由。試圖包含捆綁的boost文件頭會將您的「浪費」時間從版本控制轉移到構建時間。這並沒有真正的規模。我會拒絕使用提升,如果你試圖這樣做我的提升標題。

你之前問過類似的問題,我想我仍然不確定你想要解決哪些技術限制。

0

沒有辦法將所有文件打包在一個文件中(除了對存檔進行版本控制,但這不是很好的做法,也不是實用的)。另一方面,Subversion在檢查數千個小文件(比如boost頭文件)方面速度很慢,所以也許你可以考慮切換到像Git這樣的更高性能的SCM。

您會對bcp感興趣,它是一款Boost工具,可以分析您的源代碼並將其複製到您使用的Boost標題的單獨目錄中。這對減少第三方文件有很大幫助,對我來說大部分都是正確的(只需在列表中添加幾個)。

0

不是你問的,但這是一個解決問題的方法。據我瞭解,您正在將Boost文件添加到您的代碼控制存儲庫。爲什麼?它們本身不屬於您的項目,它們不在您的控制之下。

下面是我如何構建我的項目,使我不會遇到這樣的問題。除了包括lib文件夾之外,所有內容都添加到源控件中,如下所述。 (我只顯示我的目錄樹中的相關部分。)

  • /
    • SRC —包括我自己的源文件和頭
    • EXT —外部依賴(如升壓)
      • 提升-1-46-1
        • 下載。TXT —包括鏈接,您可以從
        • 包括—此下載正確的版本不會被添加到源代碼控制
        • LIB —這既不
+0

「爲什麼?它們本身不屬於你的項目,它們不受你控制。」有幾個理由這樣做。我將外部項目置於版本控制之下,以便將其分發到其他計算機(只需進行拉取,然後獲得所需內容)即可。它還確保如果我意外更改了任何文件,我可以撤消這些更改。當然,如果我需要修復一個bug,它已經在版本控制之下。 –

+3

確保所有開發人員都在同一版本的第三方庫是一個噩夢,如果你不把東西在版本控制。 –

+0

@Tom&Nicol:我承認我以前從來沒有和一個團隊一起工作過,答案是從這個角度寫的。不過,擁有兩個存儲庫不是更好:一個用於代碼,一個用於第三方庫? –

1

ccache可以是用於加速預處理器大量編譯的生命保護程序。